1

나는 데이터베이스에서 데이터로 커서를 가져와야하는 주요 Activity, SQLiteOpenHelper 클래스 및 Fragment를가집니다. 내 주요 활동 내부android.database.StaleDataException : 닫힌 커서에 액세스

내가 저장하고 정적 public 멤버로, 데이터베이스를 시작 :

public class Main extends FragmentActivity { 
    public static Main MainActivity; 
    public static DBHelper Database; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     MainActivity = this; 
     Database = new Database(getApplicationContext(), "db_test", null, 1); 
    } 
} 

이 내 데이터베이스의 클래스가 같은 모습입니다 : 내 조각 내부

public class DBHelper extends SQLiteOpenHelper { 
    public static final String MAIN_TABLE = "tbl_list"; 

    public DBHelper(Context c, String n, CursorFactory f, int v) { 
     super(c, n, f, v); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(
      "CREATE TABLE IF NOT EXISTS " + MAIN_TABLE + " (" + 
      "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      "name VARCHAR (64) NOT NULL, " + 
      "status TEXT DEFAULT NULL " + 
      ")" 
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
    } 
} 

, 내가 모든 레코드가있는 목록을 검색하려고합니다 :

public class MyFrag extends Fragment { 
    private DBHelper db; 

    @Override 
    public View onCreateView(LayoutInflater i, ViewGroup v, Bundle b) { 
     db = Main.Database.getWritableDatabase(); 
    } 

    private void showList() { 
     ListView list_view= new ListView(Main.MainActivity); 
     String[] data = { "_id", "name", "status" }; 
     Cursor c = db.query(Database.TASKS_TABLE, data, null, null, null, null, null); 

     c.moveToFirst(); 

     if (c.getCount() > 0) { 
      String[] columns = new String[] { "name", "status" }; 
      int[] views = new int[] { 
       R.id.item_name, 
       R.id.item_status 
      }; 
      SimpleCursorAdapter adapter = new SimpleCursorAdapter(
       Main.MainActivity, 
       R.layout.mylist, 
       c, 
       columns, 
       views, 
       0 
      ); 
      list_view.setAdapter(adapter); 
     } 
    } 
} 

나는 응용 프로그램을 실행할 때 의 오류 : 당신이 그것을 액세스 할 수있는 방법이 없다, 그래서 당신은 데이터베이스에 대한 연결을 열지 않았다 android.database.StaleDataException: Access closed cursor

+0

게시 전체 스택 추적 – pskink

답변

1

, 당신은 당신의 데이터베이스를 여는 방법을 추가해야하고

을 조작 완료 후 당신은 그것을 닫습니다