雖然這是一個常見錯誤,並且可能會有這麼多與此異常相關的帖子。但這裏是奇怪的情況。我在Android 2.2中遇到了java.lang.IllegalStateException: database not open
異常。在剩下的移動設備上運行良好。Gettine異常:java.lang.IllegalStateException:數據庫未打開
的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;
}
任何人可以幫助我,請..
你在哪裏叫dh.open()? – 2013-04-09 04:32:10
PLZ也加上checkRating方法代碼,問題 – 2013-04-09 04:33:39
@HoanNguyen,請查看我編輯的問題 – Naveen 2013-04-09 04:36:11