“使用表名请求列名”中的Android异常

时间:2015-01-25 13:49:26

标签: android mediastore android-loadermanager

我一直在制作音乐播放应用。在应用程序中,在显示艺术家列表的同时,我得到了一个java.lang.exception。虽然该应用程序正在运行,但由于此异常,从不强制关闭。但我仍然想知道异常背后的原因,因为它可能会在以后引起问题。我已经查看过不同的地方寻求解决方案,但无法找到任何解决方案。

以下是我的参考代码:

public class ArtistFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>{

SimpleCursorAdapter mCursorAdapter;

public ArtistFragment(){
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_artist_layout, container, false);

    String[] fromColumn = {"MediaStore.Audio.Artists.ARTIST"};
    int[] toView = {R.id.songTitle};

    mCursorAdapter = new SimpleCursorAdapter(
            getActivity().getApplicationContext(),
            R.layout.text_item_layout,
            null,
            fromColumn,
            toView,
            0);

    setListAdapter(mCursorAdapter);
    return rootView;
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Intent i = new Intent(getActivity().getApplicationContext(), ArtistActivity.class);
    Cursor cur = (Cursor) l.getItemAtPosition(position);
    // I think this might be causing it!
    int artistColumn = cur.getColumnIndex(MediaStore.Audio.Artists.ARTIST);
    String artistName = cur.getString(artistColumn);
    i.putExtra("artist_id", id);
    i.putExtra("artist_name", artistName);
    startActivity(i);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    getLoaderManager().initLoader(0, null, this);
}

public Loader<Cursor> onCreateLoader(int id, Bundle args) {

    String[] mProjection =
        {
            MediaStore.Audio.Artists._ID,
            MediaStore.Audio.Artists.ARTIST
        };

    String mSelectionClause = null;

    String[] mSelectionArgs = null;

    return new CursorLoader(getActivity(), MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
            mProjection, mSelectionClause, mSelectionArgs,
            MediaStore.Audio.Artists.ARTIST + " ASC");

}

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mCursorAdapter.swapCursor(data);   //The exception points to this line!
}

public void onLoaderReset(Loader<Cursor> loader) {
    mCursorAdapter.swapCursor(null);
}

}


这是logcat:

01-25 15:45:58.027    9719-9719/com.anjani.beatsapp11 E/Cursor﹕ requesting column name with table name -- MediaStore.Audio.Artists.ARTIST
java.lang.Exception
        at android.database.AbstractCursor.getColumnIndex(AbstractCursor.java:279)
        at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:301)
        at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78)
        at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333)
        at android.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:345)
        at com.anjani.beatsapp11.ArtistFragment.onLoadFinished(ArtistFragment.java:88)
        at com.anjani.beatsapp11.ArtistFragment.onLoadFinished(ArtistFragment.java:18)
        at android.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:483)
        at android.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:451)
        at android.content.Loader.deliverResult(Loader.java:144)
        at android.content.CursorLoader.deliverResult(CursorLoader.java:109)
        at android.content.CursorLoader.deliverResult(CursorLoader.java:42)
        at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:265)
        at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:92)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)



任何帮助将不胜感激。

0 个答案:

没有答案