Reputation: 821
Please help me to rsolve the error :
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
code:
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);
}
}
Upvotes: 3
Views: 3892
Reputation: 87064
You probably call getWritableDatabase()
(or getReadableDatabase()
) in one of the methods onCreate()
or onUpgrade()
of your implementation of SQLiteOpenHelper
. getWritableDatabase()
calls onCreate
(or onUpgrade
) so if you have a getWritableDatabase()
call in one of those methods you will run in trouble.
Those methods have a parameter (a SQLiteDatabase
object) that you must use to do your database logic(so you must NOT call getWritableDatabase()
(or getReadableDatabase()
in there).
Upvotes: 13
Reputation: 8641
Need to see your code, but I suspect you're not calling SQLiteOpenHelper at the correct point in your startup.
It's OK to create your SQLiteOpenHelper object in onCreate(), but don't open the database until you need to read or write. In a content provider, the standard pattern is to create the SQLiteOpenHelper in ContentProvider.onCreate(), but not call getWriteableDatabase() until an access comes in.
Upvotes: 0