我在市场上发布了一个应用程序。我收到一条评论说它不会在 SG3 上运行。我的一位朋友告诉我,她的手机上没有。他有 SG1 (2.3.3),所以可能是星系特定的问题(它适用于 Galaxy S)。她给我发了堆栈跟踪:
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.b2creative.b2callstats/com.b2creative.b2callstats.Calllogs}:android.database.sqlite.SQLiteException:无法在 android.app.ActivityThread.performLaunchActivity(ActivityThread .java:1651) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java :935) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread.main(ActivityThread.java:3687) 在 java .lang.reflect.Method.invokeNative(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller 的 java.lang.reflect.Method.invoke(Method.java:507)。在 dalvik.system.NativeStart.main(Native Method) 的 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 运行(ZygoteInit.java:842) 原因:android.database.sqlite.SQLiteException:无法在android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1849)在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java: 820) 在 android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854) 在 android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847) 在 android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:630) ) 在 android.database.sqlite.SQLiteOpenHelper 的 android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)。getWritableDatabase(SQLiteOpenHelper.java:118) at com.b2creative.b2callstats.HotOrNot.open(HotOrNot.java:69) at com.b2creative.b2callstats.Calllogs.refreshList(Calllogs.java:1579) at com.b2creative.b2callstats.Calllogs .onCreate(Calllogs.java:277) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) ... 11 更多
谷歌搜索时,我发现了几个类似的错误,但我无法找出导致此问题的原因,而且很难测试,因为它不会出现在我的手机、中兴 Blade 和三星我家里有的galaxy mini。
我想检查她手机上的数据库路径,但由于它在一开始就强制关闭,所以我无法得到它。在我的手机上,它是默认路径:/data/data/com.b2creative.b2callstats/databases/CallDatabase。
也许她的手机上没有这样的路径?
我的 sqliteopenhelper 类的一部分:
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super (context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_NAME + " VARCHAR(200) NOT NULL, " +
KEY_PHONE + " VARCHAR(70) NOT NULL, " +
KEY_TYPE + " CHAR(1) NOT NULL, " +
KEY_DURATION + " VARCHAR(70) NOT NULL, " +
KEY_DATE + " VARCHAR (20) NOT NULL, " +
KEY_CONTACTID + " VARCHAR (50) NOT NULL)"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public HotOrNot(Context c){
ourContext = c;
}
public HotOrNot open() throws SQLException{
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase(); //error line 08.19.2012 6:32:57 PM
return this;
}
public void close(){
ourHelper.close();
}
PS:她看起来不错... :)