我已经在我的应用程序中设置了一个内容提供程序,并使用LoaderManager加载了数据,但是在将游标交换到游标适配器时遇到了麻烦,我测试了游标是否正在返回数据并且正在返回!跟踪了问题,似乎是ad.swapCursor(cursor);的问题。

您认为我在这里做错了什么?可能是内容提供商吗?

public class Main extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {

public SimpleCursorAdapter ad;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    getLoaderManager().initLoader(0, null, Main.this) != null);
            ad = new SimpleCursorAdapter(this, android.R.id.list, null, null, null, 0);
}

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Started!", Toast.LENGTH_SHORT).show();
    CursorLoader cursorLoader = new CursorLoader(getBaseContext(),
            AviatorContentProvider.LISTS_URI, null, null, null, null);
    if(cursorLoader != null){
        Toast.makeText(this, "This thing is heavy!", Toast.LENGTH_SHORT).show();
    }

    return cursorLoader;

}

public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    // TODO Auto-generated method stub
    ad.swapCursor(cursor);

}

public void onLoaderReset(Loader<Cursor> arg0) {
    // TODO Auto-generated method stub

}}


谢谢

最佳答案

您永远不会初始化SimpleCursorAdapter“广告”。尝试在适配器上调用swapCursor时,可能会出现空指针异常。

onCreate中初始化适配器,并传递空光标(因为尚未加载任何数据)。

String[] from = new String[] { COLUMN_NAME_FROM_YOUR_CURSOR };
int[] to = new int[] { android.R.id.text1 };
ad = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to,0);


请注意我有“ COLUMN_NAME_FROM_YOUR_CURSOR”的位置。您需要在其中放置一列的String值(来自常量或硬编码值)

确保检查logcat以查看收到的错误。它将准确告诉您错误是什么以及导致它的代码行。

07-27 20:48