0

カーソルを使用してコンテンツ プロバイダーにクエリを実行する方法に取り組んでいます。レコードを削除すると、loadfromProviderメソッドが呼び出され、配列リストが更新されます。通常、コンテンツ プロバイダーにはレコードが含まれていますが、すべてのレコードを削除してクエリを自動的に実行すると、例外がスローされます。これが私の方法です:

private void loadFromProvider() {

    // Clear the existing array list

    EQlist.clear();

      ContentResolver cr = getContentResolver();

      // Return all the saved records
      Cursor c = cr.query(EQProvider.CONTENT_URI, null, null, null, null);

      if (c.moveToFirst()) {
        do { 

          String details = c.getString(EQProvider.DETAILS_COLUMN);
          String linkString = c.getString(EQProvider.LINK_COLUMN);

          EQli q = new EQli(details, linkString);
          addEQToArray(q);
        } while(c.moveToNext());
      }
      c.close();
      }

コンテンツ プロバイダーにレコードがない状態でこれを実行すると、次のメッセージがスローされます。

java.lang.IndexOutOfBoundsException: 無効なインデックス 1、java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) でのサイズは 1 です

これは、カーソルが null 値を解析しようとしていることが原因だと思います。カーソルがレコードを返さない場合、残りのコードをバイパスして何も起こらない方法を見つけようとしています。

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

レコードがない場合、カーソルは空になります。カーソルが空の場合c.moveToFirst()は戻りfalse、do-while ループには入りません。

アプリケーションをデバッグし、カーソルが空であることを確認します。

于 2011-03-30T01:00:21.000 に答える