2013-02-19 176 views
0
public Cursor getsomething() 
{ 
    this.open(); 
    Cursor c= database.query(DatabaseHandler.Table_Name,magicdata,null, null, null,null,null); 

    this.close(); 
    return c; 
} 

我正在使用此代碼來查詢我的數據庫。然後我在主要活動中調用這個。無法從光標獲取數據?

get=X.getsomething(); 
if (get.getCount() > 0) 
{ 
    if (get.moveToFirst()) 
    { 
     do { 
     String uname = get.getString(get.getColumnIndex("content_id")); 
    String unknown =url + uname; 
    String ax= get.getString(get.getColumnIndex("content")); 
    downloadimages(url,ax); 
     } 
     while (get.moveToNext()); 
    } 
} 
}} 

我在這裏得到error,我的代碼沒有運行,我不知道爲什麼?

錯誤代碼如下

02-20 10:27:18.378: E/PhonePolicy(1261): Could not preload class for phone policy com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback 
02-20 10:27:18.488: D/TextLayoutCache(1261): Using debug level: 0 - Debug Enabled: 0 
02-20 10:27:20.998: D/AndroidRuntime(1261): Shutting down VM 
02-20 10:27:20.998: W/dalvikvm(1261): threadid=1: thread exiting with uncaught exception (group=0x40a3e1f8) 
02-20 10:27:20.998: E/AndroidRuntime(1261): FATAL EXCEPTION: main 
02-20 10:27:20.998: E/AndroidRuntime(1261): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.newpicker/com.example.newpicker.MainActivity}: java.lang.IllegalStateException: database /data/data/com.example.newpicker/databases/content.db (conn# 0) already closed 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.os.Looper.loop(Looper.java:137) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread.main(ActivityThread.java:4429) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at java.lang.reflect.Method.invoke(Method.java:511) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at dalvik.system.NativeStart.main(Native Method) 
02-20 10:27:20.998: E/AndroidRuntime(1261): Caused by: java.lang.IllegalStateException: database /data/data/com.example.newpicker/databases/content.db (conn# 0) already closed 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:413) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:400) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at com.example.newpicker.MainActivity.datamining(MainActivity.java:70) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at com.example.newpicker.MainActivity.onCreate(MainActivity.java:45) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.Activity.performCreate(Activity.java:4465) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-20 10:27:20.998: E/AndroidRuntime(1261): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
02-20 10:27:20.998: E/AndroidRuntime(1261): ... 11 more 
+1

請向我們展示logcat日誌... – 2013-02-19 12:22:19

+0

粘貼您的logcat。 – 2013-02-19 12:23:38

+0

如果你發佈logcat,理解你的問題會更好。 – GrIsHu 2013-02-19 12:25:26

回答

1

讀取線

10月2日至20日:27:20.998:E/AndroidRuntime(1261):了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.newpicker/COM .example.newpicker.MainActivity}:java.lang.IllegalStateException:數據庫/data/data/com.example.newpicker/databases/content.db(康恩#0)已經從我們看到的日誌關閉

database already closed所以你必須做的事情是:

打開數據庫,並確保它不會關閉,直到你運行你的光標的代碼:在您的活動代碼,爲了不留下打開您的數據庫使用類似

public Cursor getsomething() 
    { 
     // this.open(); // <-- explained below 
     Cursor c= database.query(DatabaseHandler.Table_Name,magicdata,null, null, null,null,null); 

     // this.close(); // <-- if `this` refers to DB, it's a mistake, close DB at the end. 
     return c; 
    } 

所以:

X = new YourDatabaseClassName(); // new instance of your database (class contains getsomething method) 
X.open(); // open DB 
get=X.getsomething(); 
if (get != null && get.getCount() > 0) // also add a null check 
{ 
    if (get.moveToFirst()) 
    { 
     do { 
      String uname = get.getString(get.getColumnIndex("content_id")); 
      String unknown =url + uname; 
      String ax= get.getString(get.getColumnIndex("content")); 
      downloadimages(url,ax); 
     } 
     while (get.moveToNext()); 
    } 
    get.close(); // also close the cursor 
} 
X.close(); // you end with DB so close it! next time it needs to reopened 

Here也是一個android數據庫教程。

1

這裏是您的解決方案。嘗試這個。

String[] columnArray = { "content_id, content " }; 
     Cursor cursor = database.query(DatabaseHelper.TABLE_NAME,columnArray, null, null, null, null, null); 
     if (cursor.getCount() > 0) { 
      cursor.moveToFirst(); 
      do { 
       int id = cursor.getInt(cursor.getColumnIndex("content_id")); 
       String content =cursor.getString(cursor.getColumnIndex("content")); 
      } while (cursor.moveToNext()); 
      cursor.close(); 
     } else { 
      Log.i("TAG"," No value found"); 

     }