2

列出专辑时,我无法显示来自媒体商店的专辑封面,我得到了

错误

Bad request for field slot 0,-1. numRows = 32, numColumns = 7
01-02 02:48:16.789: D/AndroidRuntime(4963): Shutting down VM
01-02 02:48:16.789: W/dalvikvm(4963): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
01-02 02:48:16.804: E/AndroidRuntime(4963): FATAL EXCEPTION: main
01-02 02:48:16.804: E/AndroidRuntime(4963): java.lang.IllegalStateException: get field slot from row 0 col -1 failed

任何人都可以帮助解决这个问题,在此先感谢

public class AlbumbsListActivity extends Activity {
    private ListAdapter albumListAdapter;
    private HashMap<Integer, Integer> albumInfo;
    private HashMap<Integer, Integer> albumListInfo;
    private HashMap<Integer, String> albumListTitleInfo;
    private String audioMediaId;
    private static final String TAG = "AlbumsListActivity";
    Boolean showAlbumList = false;
    Boolean AlbumListTitle = false;
    ImageView album_art ;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.albums_list_layout);

        Cursor cursor;


    ContentResolver cr = getApplicationContext().getContentResolver();
    if (getIntent().hasExtra(Util.ALBUM_ID)) {
        int albumId = getIntent().getIntExtra(Util.ALBUM_ID,
            Util.MINUS_ONE);
        String[] projection = new String[] { Albums._ID, Albums.ALBUM, Albums.ARTIST, Albums.ALBUM_ART,                             Albums.NUMBER_OF_SONGS };
        String selection = null;
        String[] selectionArgs = null;
        String sortOrder = Media.ALBUM + " ASC";
        cursor = cr.query(Albums.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, sortOrder);

    /*  final String[] ccols = new String[] {
            //MediaStore.Audio.Albums.,
            MediaStore.Audio.Albums._ID,
            MediaStore.Audio.Albums.ALBUM,
            MediaStore.Audio.Albums.ARTIST,
            MediaStore.Audio.Albums.ALBUM_ART,
            MediaStore.Audio.Albums.NUMBER_OF_SONGS
             };

    cursor = cr.query(MediaStore.Audio.Albums.getContentUri(
            "external"), ccols, null, null,
            MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);*/
        showAlbumList = true;
    } 
    else
     {
        String order = MediaStore.Audio.Albums.ALBUM + " ASC";
        String where = MediaStore.Audio.Albums.ALBUM;
        cursor = managedQuery(Media.EXTERNAL_CONTENT_URI,
            DbUtil.projection, null, null, order);
        showAlbumList = false;
    }
    albumInfo = new HashMap<Integer, Integer>();
    albumListInfo = new HashMap<Integer, Integer>();
    ListView listView = (ListView) findViewById(R.id.mylist_album);
    listView.setFastScrollEnabled(true);
    listView.setOnItemLongClickListener(new ItemLongClickListener());
    listView.setAdapter(new AlbumCursorAdapter(this, cursor,
        DbUtil.displayFields, DbUtil.displayViews,showAlbumList));
    final Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
    final Cursor albumListCursor = cr.query(uri, DbUtil.Albumprojection,
        null, null, null);


} 



    private class AlbumCursorAdapter extends SimpleCursorAdapter implements SectionIndexer{
    private final Context context;
    private final Cursor cursorValues;
    private Time musicTime;
    private Boolean isAlbumList;
    private MusicAlphabetIndexer mIndexer;
        private int mTitleIdx;

    public AlbumCursorAdapter(Context context, Cursor cursor, String[] from,
            int[] to,Boolean isAlbumList) {
        super(context, 0, cursor, from, to);
        this.context = context;
        this.cursorValues = cursor;
        //musicTime = new Time();
        this.isAlbumList = isAlbumList;
    }
    String albumName="";
    String artistName = "";
    String numberofsongs = "";
    long albumid;
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater
                    .inflate(R.layout.row_album_layout, parent, false);
        }

        this.cursorValues.moveToPosition(position);
        String title = "";
        String artistName = "";
        String albumName = "";
        int count;
        long albumid = 0;
        String songDuration = "";
        if (isAlbumList) {
            albumInfo.put(
                    position,
                    Integer.parseInt(this.cursorValues.getString(this.cursorValues
                            .getColumnIndex(MediaStore.Audio.Albums._ID))));

            artistName = this.cursorValues
                    .getString(this.cursorValues
                            .getColumnIndex(MediaStore.Audio.Albums.ARTIST));
            albumName = this.cursorValues
                    .getString(this.cursorValues
                            .getColumnIndex(MediaStore.Audio.Albums.ALBUM));

            albumid=Integer.parseInt(this.cursorValues.getString(this.cursorValues
                    .getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID)));       

        } else {
            albumInfo.put(position, Integer.parseInt(this.cursorValues
                    .getString(this.cursorValues
                            .getColumnIndex(MediaStore.Audio.Media._ID))));

            artistName = this.cursorValues.getString(this.cursorValues
                    .getColumnIndex(MediaStore.Audio.Media.ARTIST));
            albumName = this.cursorValues.getString(this.cursorValues
                    .getColumnIndex(MediaStore.Audio.Media.ALBUM));

            albumid=Integer.parseInt(this.cursorValues.getString(this.cursorValues
                    .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)));         

        }
        //code for Alphabetical Indexer 
        mTitleIdx = cursorValues.getColumnIndex(MediaStore.Audio.Media.ALBUM);
        mIndexer = new MusicAlphabetIndexer(cursorValues, mTitleIdx,
                 getResources().getString(R.string.fast_scroll_alphabet));
        //end

        TextView metaone = (TextView) rowView.findViewById(R.id.album_name);
        TextView metatwo = (TextView) rowView.findViewById(R.id.artist_name);
        ImageView metafour = (ImageView) rowView.findViewById(R.id.album_art);
        TextView metathree = (TextView) rowView
                .findViewById(R.id.songs_count);
        metaone.setText(albumName);
        metatwo.setText(artistName);
        (metafour)getAlbumArt(albumid); 


        System.out.println("albumid----------"+albumid);
                        metaThree.setText(DbUtil.makeTimeString(context, secs));
                    getAlbumArt(albumid); 
        }

        TextView metaone = (TextView) rowView.findViewById(R.id.album_name);
        TextView metatwo = (TextView) rowView.findViewById(R.id.artist_name);
        album_art = (ImageView) rowView.findViewById(R.id.album_art);
        //TextView metathree = (TextView) rowView.findViewById(R.id.songs_count);
        metaone.setText(albumName);
        metatwo.setText(artistName);        
        return rowView;
    }

    }
       String albumArtUri = "";
        private void getAlbumArt(long albumid) {
        Uri uri=ContentUris.withAppendedId(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumid);
        System.out.println("hhhhhhhhhhh" + uri);
        Cursor cursor = getContentResolver().query(
                     ContentUris.withAppendedId(
                         MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumid),
                     new String[] { MediaStore.Audio.AlbumColumns.ALBUM_ART },
                     null,
                     null,
                     null);
        if (cursor.moveToFirst()) {
           albumArtUri = cursor.getString(0);

        }
        System.out.println("kkkkkkkkkkkkkkkkkkk :" + albumArtUri);
        cursor.close();
        if(albumArtUri != null){

         Options opts = new Options();
             opts.inJustDecodeBounds = true;
             Bitmap albumCoverBitmap = BitmapFactory.decodeFile(albumArtUri, opts);
             opts.inJustDecodeBounds = false;
             albumCoverBitmap = BitmapFactory.decodeFile(albumArtUri, opts);
             if(albumCoverBitmap != null)
               album_art.setImageBitmap(albumCoverBitmap);
        }else {
             // TODO:
             Options opts = new Options();
             Bitmap albumCoverBitmap = BitmapFactory.decodeResource(getApplicationContext().getResources(),
                                     R.drawable.albumart_mp_unknown_list, opts);
             if(albumCoverBitmap != null)
             album_art.setImageBitmap(albumCoverBitmap);
           }


        }

    }

}
4

0 回答 0