1

ローカル データベースのテーブルのすべてのエントリを取得しようとすると、次のエラーが発生します。

java.lang.RuntimeException: アクティビティ ComponentInfo を開始できません {com.example.contactappca2/com.example.contactappca2.ViewActivity}: java.lang.IllegalStateException: CursorWindow から行 0、列 0 を読み取れませんでした。Cursor からデータにアクセスする前に、Cursor が正しく初期化されていることを確認してください。

原因: java.lang.IllegalStateException: CursorWindow から行 0、列 0 を読み取れませんでした。Cursor からデータにアクセスする前に、Cursor が正しく初期化されていることを確認してください。

これは、エントリを取得する DbAdapter クラス内のメソッドです。

public List<Contact>getAllContacts(){
    contacts = new ArrayList<Contact>();
    cursor = db.query(TABLE_NAME, new String [] {COLUMN_NAME, COLUMN_NUMBER, COLUMN_EMAIL, COLUMN_IMG}, null,null,null,null,null);
    if(cursor.moveToFirst()){
        do{
            c = new Contact();
            c.setName(cursor.getString(0), null);
            c.setNumber(cursor.getString(1));
            c.setEmail(cursor.getString(2));
            byte [] blob = cursor.getBlob(cursor.getColumnIndex(COLUMN_IMG));
            ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
            Bitmap b = BitmapFactory.decodeStream(inputStream); 
            c.setPicture(b);
            contacts.add(c);
        }while(cursor.moveToNext());
    }

    return contacts;
}

私が間違っていることは何ですか?どうもありがとう。

4

1 に答える 1

0

Cursorsこれを作成する前に、もう一方が閉じていることを確認してください(メモリを解放するため)。

しかし、コンテンツをチャンクで取得しようとすると、はるかに優れた結果が得られます。これは、無限に読み込まれるリストビューなどの効果が大きくなります。

SQLiteしかし、そもそもこのような問題に遭遇したとしたら、このような本格的なオブジェクトを保持するために を使用するという考えを捨てることになると、私は本当に言わなければなりません. これらの画像をSDカードまたはローカルメモリに保存し、画像の場所または少なくとも名前をデータベースに保存してから、この方法でコンテンツを管理する方がはるかに優れています.

于 2013-01-18T03:00:07.300 に答える