虽然这是一个常见错误,但可能有很多与此异常相关的帖子。但这是奇怪的情况。我在Android 2.2中获得java.lang.IllegalStateException: database not open
例外。在剩下的手机中它运作良好。
logcat的:
java.lang.IllegalStateException: database not open
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1291)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1251)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1331)
at com.mythrii.ilpa.DataHelper.checkRating(DataHelper.java:126)
at com.mythrii.ilpa.SplashActivity$1.run(SplashActivity.java:35)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
我的代码:
public class SplashActivity extends ActivityHelper
{
private DataHelper dh;
// Set the display time, in milliseconds (or extract it out as a configurable parameter)
private final int SPLASH_DISPLAY_LENGTH = 3000;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.act__splash);
dh = new DataHelper(this);
dh.inserORupdateRating();
}
protected void onResume()
{
super.onResume();
new Handler().postDelayed(new Runnable()
{
public void run()
{
clearPref();
PrefBoolEdit("rating",dh.checkRating());//=> Here is the exception
SplashActivity.this.finish();
Intent mainIntent = new Intent(SplashActivity.this, HomeActivity.class);
SplashActivity.this.startActivity(mainIntent);
}
}, SPLASH_DISPLAY_LENGTH);
}
protected void onDestroy()
{
super.onDestroy();
if (dh != null)
{
dh.close();
}
}
}
我正在使用此构造函数来调用每个活动
Datahelper
public DataHelper(Context context)
{
this.context = context;
openHelper = new OpenHelper(this.context);
this.db = openHelper.getWritableDatabase();
Calendar c = Calendar.getInstance();
formattedDate = df.format(c.getTime());
}
CheckRating
public boolean checkRating()
{
Cursor cursor = this.db.query(TABLE_NAME_1, new String[] { "option" },
null, null, null, null, null);
String option = null;
//String date = null;
boolean bool = false;
if (cursor.moveToFirst())
{
do {
//date = cursor.getString(0);
option = cursor.getString(0);
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
if(getRateCount()>0)
{
if(!option.equals(ALREADY_RATED))
{
bool = true;
}
else
{
bool = false;
}
}
else
{
bool = false;
}
return bool;
}
请有人帮帮我..
答案 0 :(得分:3)
答案 1 :(得分:0)
这可能有助于您创建SQLiteOpenHelper
package org.groundme.sqlite;
import org.groundme.general.General;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class TaskDatabaseHelper extends SQLiteOpenHelper {
public static final String TAG = "TaskDatabaseHelper";
public static final String DATABASE_NAME = "MyTask.db";
public static final int DATABASE_VERSION = 9;
public static final String TABLE_NAME = "tasklist";
public static String ID="id";
public static final String TASK_TITLE = "task_title";
public static final String TASK_DESC = "task_desc";
public static final String TASK_DATE = "task_date";
public static final String TASK_TIME = "task_time";
public static final String TASK_LOCATION = "task_location";
public static final String TASK_LAT = "task_lat";
public static final String TASK_LNG = "task_lng";
public static final String TASK_STATUS = "status";
public static final String TASK_TLBASE = "timeloc_base";
public static final String TASK_DURATION = "task_duration";
private static final String DATABASE_CREATE = "create table " + TABLE_NAME + "(" +
ID + " integer primary key autoincrement ," +
TASK_TITLE + " text," +
TASK_DESC + " text," +
TASK_DATE + " text," +
TASK_TIME + " text," +
TASK_LOCATION + " text ," +
TASK_LAT + " text ," +
TASK_LNG + " text ," +
TASK_STATUS + " text ," +
TASK_TLBASE + " INTEGER default 0," +
TASK_DURATION + " text)";
public TaskDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
Log.i(General.TAG, TAG + "constructer");
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.i(General.TAG, TAG + "oncreate");
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
并打开课程并在今年五月帮助你。
public class TaskData {
public TaskData(Context ctx) {
Log.i(General.TAG, TAG + "TaskData");
taskdbhelper = new TaskDatabaseHelper(ctx);
}
public void open() throws SQLException {
Log.i(General.TAG, TAG + "open");
if (sqlitedb == null) {
sqlitedb = taskdbhelper.getWritableDatabase();
}
}
}
通过创建TaskData
object
,您可以创建您的上下文,在这里您还可以更新,插入,删除函数传递以供进一步使用。