2012-03-03 106 views
3

請幫我rsolve錯誤:java.lang.IllegalStateException:getWritableDatabase遞歸調用

D/AndroidRuntime(836): Shutting down VM 
W/dalvikvm(836): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
E/AndroidRuntime(836): FATAL EXCEPTION: main 
E/AndroidRuntime(836): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.FirstProject/com.example.FirstProject.List}: java.lang.IllegalStateException: getWritableDatabase called recursively 
E/AndroidRuntime(836): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
E/AndroidRuntime(836): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
E/AndroidRuntime(836): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
E/AndroidRuntime(836): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
E/AndroidRuntime(836): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(836): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(836): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(836): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(836): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(836): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(836): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(836): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(836): Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively 
E/AndroidRuntime(836): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:81) 
E/AndroidRuntime(836): at com.example.FirstProject.Database.onCreate(Database.java:36) 
E/AndroidRuntime(836): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 
E/AndroidRuntime(836): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) 
E/AndroidRuntime(836): at com.example.FirstProject.List.onCreate(List.java:38) 
E/AndroidRuntime(836): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime(836): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
E/AndroidRuntime(836): ... 11 more 

代碼:

package com.example.FirstProject; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 



public class List extends ListActivity{ 
ListView stations; 
protected int tn; 
protected TextView source; 
protected EditText searchText; 
protected ListAdapter adapter; 
protected Cursor cursor; 


@Override 
    public void onCreate(Bundle savedInstanceState)throws IllegalStateException { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.screen2); 

     tn = getIntent().getIntExtra("tn", 0); 
     SQLiteDatabase db = (new Database(this)).getReadableDatabase(); 
     // searchText = (EditText) findViewById (android.R.id.list); 
     stations = (ListView) findViewById (android.R.id.list); 


     Cursor cursor = db.rawQuery("SELECT source._id,FROM tinfo WHERE city._id =  Mumbai", new String[]{}); 
     startManagingCursor(cursor); 

     adapter = new SimpleCursorAdapter(this, R.layout.screen2, cursor, new  String[] {}, new int[] {}); 
     stations.setAdapter(adapter); 

} 

} 
+0

添加你的代碼,我們也許能夠幫助你。 – 2012-03-03 15:28:57

+0

嘿朋友我已經添加了code.Please檢查出來,並告訴我如何解決該錯誤...請幫助。 – TechHelper 2012-03-03 21:09:04

+0

這還不夠,我們需要你的'數據庫'類的代碼 – 2012-03-04 09:33:47

回答

0

需要看到你的代碼,但我懷疑你在啓動時沒有在正確的位置調用SQLiteOpenHelper。

可以在onCreate()中創建SQLiteOpenHelper對象,但在您需要讀取或寫入之前不要打開數據庫。在內容提供商,標準模式是建立在ContentProvider.onCreate()的 SQLiteOpenHelper,但不叫getWriteableDatabase(),直到 訪問的用武之地。

13

你可能在一個叫getWritableDatabase()(或getReadableDatabase())方法onCreate()onUpgrade()你的執行SQLiteOpenHelpergetWritableDatabase()致電onCreate(或onUpgrade),所以如果你有getWritableDatabase()調用其中一種方法,你會遇到麻煩。

這些方法有一個參數(SQLiteDatabase對象),您必須使用做你的數據庫邏輯(這樣你就不能調用getWritableDatabase()(或getReadableDatabase()在那裏)。