Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Gettine异常:java.lang.IllegalStateException:数据库未打开_Android_Android Sqlite - Fatal编程技术网

Android Gettine异常:java.lang.IllegalStateException:数据库未打开

Android Gettine异常:java.lang.IllegalStateException:数据库未打开,android,android-sqlite,Android,Android Sqlite,虽然这是一个常见的错误,可能有这么多的帖子与此异常有关。但这是一个奇怪的情况。我得到了Android 2.2中的java.lang.IllegalStateException:database not open异常。在剩余的手机中,它工作得很好 日志: java.lang.IllegalStateException: database not open at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabas

虽然这是一个常见的错误,可能有这么多的帖子与此异常有关。但这是一个奇怪的情况。我得到了Android 2.2中的
java.lang.IllegalStateException:database not open
异常。在剩余的手机中,它工作得很好

日志:

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();
    }
}
}
我使用这个构造函数来调用每个活动

数据助手

 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());
   }
核对

   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();

这可以帮助您创建
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);
}

}


通过创建
TaskData
对象
您可以创建pase您的上下文,在这里您还可以更新、插入、删除函数pass以供进一步使用。

您在哪里调用了dh.open()?plz还可以使用question@HoanNguyen,请检查我编辑的问题,实际上我使用的构造函数是
dh=newdatahelper(这个)来自活动。那么我在哪里调用dh.open();我不知道如何编写dbhelper类代码..但在上下文传递中可能会遇到问题。。
public void open() throws SQLException {

  Log.i(General.TAG, TAG + "open");
  if (sqlitedb == null) {   
   sqlitedb = taskdbhelper.getWritableDatabase();
  }
 }