2013-04-09 2 views
1

Хотя это распространенная ошибка, и может быть так много сообщений, связанных с этим исключением. Но вот странная ситуация. Я получаю исключение java.lang.IllegalStateException: database not open в Android 2.2. В остальных мобильных телефонах он работает хорошо.Gettine Exception: 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; 
    } 

Может кто-нибудь помочь мне, пожалуйста ..

+1

Адрес: dh.open()? –

+0

PLZ также добавить checkRating метод код с вопросом –

+0

@HoanNguyen, пожалуйста, проверьте мой отредактированный вопрос – Naveen

ответ

3

перед тем выполнить любую операцию, вы должны открыть базу данных

dh.open(); 

See this one и also this one

+1

На самом деле я использую конструктор как 'dh = new datahelper (this);' from activity. то где я называю dh.open(); – Naveen

+0

Я не знаю, как написать вам код класса dbhelper .. но sholud быть problen в контексте прохождения. – QuokMoon

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

}

Создавая TaskDataobject вы можете создать PASE ваш контекст, и здесь вы можете также обновить, Inset, функция удаления пропуск в качестве для дальнейшего использования.

Смежные вопросы