私の活動ではAPIをリクエストしてデータを取得し、 SQLiteデータベース。次に、私はこのメソッドを呼び出します:Android - java.lang.IllegalStateException:既に閉じられているオブジェクトを再オープンしようとしました:SQLiteQuery:select * from table where rowid = 40495
public long getResultCount() {
SQLiteDatabase db = this.getReadableDatabase();
long cnt = DatabaseUtils.queryNumEntries(db, TABLE_NAME);
return cnt;
}
このメソッドは他のJavaクラスにあり、私のアクティビティで正しく動作します。このメソッドを呼び出した後、私は、メソッド呼び出し:
public ArrayList<Integer> getId(int i, int j) {
ArrayList<Integer> array_list = new ArrayList<Integer>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from "
+ TABLE_NAME
+ " limit " + i + "," + j
, null);
res.moveToFirst();
while (!res.isAfterLast()) {
array_list.add(Integer.parseInt(res.getString(res.getColumnIndex(COLUMN_ID))));
res.moveToNext();
}
return array_list;
}
を、私はその後、このコードを書くとき:
はtemp = db.getId(min * 5, min * 5 + 5);
for (int i = 0; i < temp.size(); i++) {
Cursor rs = db.getResult(temp.get(i));
rs.moveToFirst();
...
rs.close();
}
エラーが発生します。
11月8日19:16:35.108 15365-15365 /? E/AndroidRuntime:致命的な例外:メイン プロセス:com.myapp.app、PID:15365 java.lang.IllegalStateException:既に閉じられたオブジェクトを再オープンしようとしました:SQLiteQuery:select * from table where rowId = 40495 at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.javaでandroid.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:58) でandroid.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55) : (AbstractCursor.java:197) android.database.AbstractCursor.moveToFirst(Abstract )。com.myapp.app.MyFragment.populateListView(MyFragment.java:327) at com.myapp.app.MyFragment $ GetArticles.onPostExecute(MyFragment.java:693) at com.myapp。 app.MyFragment $ GetArticles.onPostExecute android.os.AsyncTask.finish(AsyncTask.java:636)で(MyFragment.java:497) アンドロイドでandroid.os.AsyncTask.access $ 500(AsyncTask.java:177) で.os.AsyncTask $ InternalHandler.handleMessage android.os.Looper.loop(Looper.java:135)でandroid.os.Handler.dispatchMessage(Handler.java:102)で(AsyncTask.java:653) アンドロイドで.app.ActivityThread.main(ActivityThread.java:5290) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit .javaファイル:911) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)で
のgetResult方法はこれです:
public Cursor getResult(int Id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from " + TABLE_NAME + " where " + COLUMN_ID + "=" + Id + "", null);
res.close();
return res;
}
あなたが投稿した最後のセグメントに例外がある場合、 'getID()'はクローズされたカーソルを返しています。あなたはそのコードを投稿しませんでした。 – laalto
正確にはどういう意味ですか? –
'getID()'コードを投稿してください。あなたが投稿した 'getid()'は違ったものです。 – laalto