2012-03-03 111 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()在那里)。