2012-11-21 41 views
1

下面我发布logcat详细信息。请告诉我如何解决这个问题。IllegalStateException:SQLite光标已关闭

11-21 14:49:33.604: E/AndroidRuntime(1721): FATAL EXCEPTION: main 
11-21 14:49:33.604: E/AndroidRuntime(1721): java.lang.RuntimeException: Unable to resume activity {com.example.shaktitool/com.example.shaktitool.Product}: java.lang.IllegalStateException: trying to requery an already closed cursor [email protected] 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2575) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2603) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.os.Looper.loop(Looper.java:137) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at dalvik.system.NativeStart.main(Native Method) 
11-21 14:49:33.604: E/AndroidRuntime(1721): Caused by: java.lang.IllegalStateException: trying to requery an already closed cursor [email protected] 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.Activity.performRestart(Activity.java:5051) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.Activity.performResume(Activity.java:5074) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2565) 
11-21 14:49:33.604: E/AndroidRuntime(1721):  ... 10 more 

我的Java代码:

package com.example.shaktitool; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.database.Cursor; 
    import android.os.Bundle; 
    import android.view.KeyEvent; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.ListView; 
    import android.widget.SimpleCursorAdapter; 



    public class Product extends Activity { 

    protected static final String PRODUCT_REQUEST = null; 

    private SQLiteAdapterPro mySQLiteAdapter; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.product); 

      Intent intent = getIntent(); 

      ListView list = (ListView)findViewById(R.id.content_list); 


      /* 
      * Create/Open a SQLite database 
      * and fill with dummy content 
      * and close it 
      */ 
      mySQLiteAdapter = new SQLiteAdapterPro(this); 
      mySQLiteAdapter.openToWrite(); 
      mySQLiteAdapter.deleteAll(); 

      mySQLiteAdapter.insert("ELECTRONICS-COMPUTERS"); 
      mySQLiteAdapter.insert("DESKTOPS"); 
      mySQLiteAdapter.insert("NOTEBOOKS"); 

      mySQLiteAdapter.close(); 

      /* 
      * Open the same SQLite database 
      * and read all it's content. 
      */ 
      mySQLiteAdapter = new SQLiteAdapterPro(this); 
      mySQLiteAdapter.openToRead(); 

      Cursor cursor = mySQLiteAdapter.queueAll(); 
      startManagingCursor(cursor); 

      String[] from = new String[]{SQLiteAdapter.KEY_CONTENT}; 
      int[] to = new int[]{R.id.text}; 

      SimpleCursorAdapter cursorAdapter = 
       new SimpleCursorAdapter(this, R.layout.row, cursor, from, to); 

      list.setAdapter(cursorAdapter); 

      list.setOnItemClickListener(new OnItemClickListener() { 

       public void onItemClick(AdapterView<?> arg0, View arg1, 
         int position, long arg3) { 

        switch(position){ 

        case 1 : Intent intent = new Intent(Product.this, Desktop.class); 
          startActivity(intent); 

          break; 

        case 2 : Intent intent1 = new Intent(Product.this, Notebook.class); 
          startActivity(intent1); 

          break;       


        } 
       } 
      }); 


      mySQLiteAdapter.close(); 



     } 
    } 
+1

请显示您的java代码 –

+0

问题是,当我按Back按钮应用程序关闭。当我按下“后退”按钮时,我应该怎么做,我必须进行上一个活动。 – Abhay

+0

你有没有相同的解决方案? –

回答

0

第一:你应该阅读StackOverflow上的常见问题。

二:通过阅读你的logcat我的理解是:

java.lang.RuntimeException: Unable to resume activity {com.example.shaktitool/com.example.shaktitool.Product}: java.lang.IllegalStateException: trying to requery an already closed cursor [email protected] 

Caused by: java.lang.IllegalStateException: trying to requery an already closed cursor [email protected] 

所以:trying to requery an already closed cursor意味着你做错事的SQLite。发布你的Java代码,你会得到帮助。

+0

Downvote for? “游标”只是简单的关闭。 – shkschneider

0

试图重新查询一个已经关闭的游标[email protected]

您试图访问一个已经关闭的游标。

如果您仍然需要它,或者创建新的数据库查询以获取另一个,请不要关闭游标。

0

错误很明显。

java.lang.IllegalStateException:试图重新查询已经关闭的 游标。

很难说清楚你是如何排队你已经关闭的光标的。 但有一种猜测是你可能正在使用startManagingCursor()并传递它已关闭的游标。