2013-11-28 30 views
0

应用程序使用外部创建的数据库(使用SQLitebrowser)。有代码将数据库从资产文件夹复制到系统位置。应用程序在Android 4.3,4.2,4.1的模拟器中工作正常。当我使用3.0和2.3查询Emulator中的数据库时,App Force关闭。 当我去DDMS视图和检查data-> data-> package->数据库时,我发现只有1个文件,所以我猜元数据不会被创建或生成。 我不确定代码的哪一部分在3.0和2.3中不被支持。 的代码段:查询db时强制关闭

Button b1=(Button)findViewById(R.id.button1); 
     b1.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       name=et1.getText().toString(); 
       Intent i=new Intent(v.getContext(),Display.class); 
       i.putExtra("dname",name); 
       i.putExtra("dr", r); 
       i.putExtra("dn",n); 
       startActivity(i); 

       } 
      }); 

的logcat:

11-29 00:13:18.897: D/dalvikvm(328): GC_EXTERNAL_ALLOC freed 972 objects/67008 bytes in 83ms 
11-29 00:13:25.537: I/Database(328): sqlite returned: error code = 14, msg = cannot open file at source line 25467 
11-29 00:13:25.537: E/Database(328): sqlite3_open_v2("/data/data/com.example.ast/databases/Astrology", &handle, 1, NULL) failed 
11-29 00:13:25.677: I/Database(328): New database is being copied to device! 
11-29 00:13:25.897: I/Database(328): New database has been copied to device! 
11-29 00:13:25.917: I/Database(328): sqlite returned: error code = 1, msg = no such table: android_metadata 
11-29 00:13:25.917: E/Database(328): SELECT locale FROM android_metadata failed 
11-29 00:13:25.957: E/Database(328): Failed to setLocale() when constructing, closing the database 
11-29 00:13:25.957: E/Database(328): android.database.sqlite.SQLiteException: no such table: android_metadata 
11-29 00:13:25.957: E/Database(328): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 
11-29 00:13:25.957: E/Database(328): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950) 
11-29 00:13:25.957: E/Database(328): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818) 
11-29 00:13:25.957: E/Database(328): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) 
11-29 00:13:25.957: E/Database(328): at com.example.ast.DataBaseHelper.checkDataBase(DataBaseHelper.java:68) 
11-29 00:13:25.957: E/Database(328): at com.example.ast.DataBaseHelper.openDataBase(DataBaseHelper.java:122) 
11-29 00:13:25.957: E/Database(328): at com.example.ast.Displayprediction.onCreate(Displayprediction.java:49) 
11-29 00:13:25.957: E/Database(328): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-29 00:13:25.957: E/Database(328): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-29 00:13:25.957: E/Database(328): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-29 00:13:25.957: E/Database(328): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-29 00:13:25.957: E/Database(328): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-29 00:13:25.957: E/Database(328): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 00:13:25.957: E/Database(328): at android.os.Looper.loop(Looper.java:123) 
11-29 00:13:25.957: E/Database(328): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-29 00:13:25.957: E/Database(328): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 00:13:25.957: E/Database(328): at java.lang.reflect.Method.invoke(Method.java:521) 
11-29 00:13:25.957: E/Database(328): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-29 00:13:25.957: E/Database(328): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-29 00:13:25.957: E/Database(328): at dalvik.system.NativeStart.main(Native Method) 
11-29 00:13:25.957: I/Database(328): New database is being copied to device! 
11-29 00:13:26.147: I/Database(328): New database has been copied to device! 
11-29 00:13:26.147: D/AndroidRuntime(328): Shutting down VM 
11-29 00:13:26.157: W/dalvikvm(328): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-29 00:13:26.167: E/AndroidRuntime(328): FATAL EXCEPTION: main 
11-29 00:13:26.167: E/AndroidRuntime(328): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ast/com.example.ast.Displayprediction}: java.lang.NullPointerException 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.os.Looper.loop(Looper.java:123) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-29 00:13:26.167: E/AndroidRuntime(328): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 00:13:26.167: E/AndroidRuntime(328): at java.lang.reflect.Method.invoke(Method.java:521) 
11-29 00:13:26.167: E/AndroidRuntime(328): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-29 00:13:26.167: E/AndroidRuntime(328): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-29 00:13:26.167: E/AndroidRuntime(328): at dalvik.system.NativeStart.main(Native Method) 
11-29 00:13:26.167: E/AndroidRuntime(328): Caused by: java.lang.NullPointerException 
11-29 00:13:26.167: E/AndroidRuntime(328): at com.example.ast.DataBaseHelper.getrPred(DataBaseHelper.java:208) 
11-29 00:13:26.167: E/AndroidRuntime(328): at com.example.ast.Displayprediction.onCreate(Displayprediction.java:106) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-29 00:13:26.167: E/AndroidRuntime(328): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-29 00:13:26.167: E/AndroidRuntime(328): ... 11 more 
11-29 00:13:30.357: I/Process(328): Sending signal. PID: 328 SIG: 9 
+0

参考@ http://stackoverflow.com/questions/7647524/ – Subbu

回答

0

在这里,你有问题:

sqlite returned: error code = 1, msg = no such table: android_metadata 

这意味着正是它说的:

no such table: android_metadata 

好,现在是解决问题的时候了使用: Android使用此表处理数据库的某些元数据,即数据库的版本。如果你在PC上(甚至是在Mac上)创建数据库文件,那么没有安装特定的表。我更喜欢从设备上的脚本创建数据库,并用数据填充(CSV文件非常容易加载数据)。这是不可能的 - 只需在设备上创建一些数据库,将其从设备复制到PC上的某个数据库工具,并在您自己的表格中填入数据并在项目中使用。