1

アプリケーションにコンテンツ プロバイダーを設定し、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

}}

ありがとう

4

1 に答える 1

4

SimpleCursorAdapter「広告」を初期化することはありません。swapCursorアダプターを呼び出そうとすると、null ポインター例外が発生する可能性があります。

でアダプターを初期化onCreateし、null カーソルを渡します (データがまだロードされていないため)。

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" がある場所に注意してください。そこに列の1つの文字列値を入れる必要があります(定数またはハードコードされた値から)

logcat をチェックして、受け取ったエラーを確認してください。エラーの内容とその原因となっているコード行が正確にわかります。

于 2012-05-15T20:01:27.910 に答える