我在我的应用程序中设置了一个内容提供程序,并使用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
}}
由于
答案 0 :(得分:4)
您永远不会初始化您的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以查看您收到的错误。它会告诉您错误是什么以及导致它的代码行。