我一直在制作音乐播放应用。在应用程序中,在显示艺术家列表的同时,我得到了一个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)
。
。
任何帮助将不胜感激。