我嘗試用SQLite配置資料庫代碼, 但是提示回傳是個空的,幫忙分析原因,部分代碼如下,程式在SQLiteDatabase db = dbHelper.getWritableDatabase();回傳錯誤,從日志來看,是沒有創建資料庫,但是本地并沒有資料庫.所以不只錯誤出在什么地方.
Activity代碼如下:
public void initOpen() {
/**
* 創建資料庫
*/
System.out.println("SQLite---initOpen寫入資料:---------");
AmeOpenHelper dbHelper = new AmeOpenHelper(DataActivity.this, "amedb.db", null, 1);
//得到一個可讀的SQLiteDatabase物件static
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
public void initEvetn() {
AmeOpenHelper dbHelper = new AmeOpenHelper(DataActivity.this,"amedb.db",null,1);
System.out.println("SQLite寫入資料:-------"+dbHelper);
//得到一個可讀的SQLiteDatabase物件
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("mtype", idm);
//呼叫insert方法,將資料插入資料庫
db.insert("ame_step_table", null, cv);
}
SQLiteOpenHelper 代碼如下
public class AmeOpenHelper extends SQLiteOpenHelper{
private static final String TAG = "AmeOpenHelper";
public static final int VERSION = 1;
//定義資料庫檔案名
public static final String DB_NAME = "amedb.db";
/**
* @param context
* @param name 資料庫檔案的名稱
* @param factory null
* @param version 資料庫檔案的版本
*/
public AmeOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
System.out.println("AmeSQLite連接資料庫:---" +context+"----"+name+"----"+factory+"----"+version);
}
// 對外提供建構式
public AmeOpenHelper(Context context) {
//呼叫該類中的私有建構式
super(context, DB_NAME, null, VERSION);
}
// 當第一次創建資料的時候回呼方法
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate");
System.out.println("AmeSQLite建立資料庫:---------" );
//String sql = "create table ame_step_table(id int,sname varchar(20),sage int,ssex varchar(10),num int)";
//創建資料庫表的陳述句
db.execSQL ( "create table IF NOT EXISTS ame_step_table" +
"(id integer primary key autoincrement,mtype int");
}
// 當資料庫升級是回呼該方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "onUpgrade: oldVersion" + oldVersion + " newVersion=" + newVersion);
String sql = "alter table t_user add c_money float";
db.execSQL(sql);
}
// 當資料庫被打開時回呼該方法
@Override
public void onOpen(SQLiteDatabase db) {
Log.d(TAG, "onOpen");
}
}
錯誤日志如下:
D/HwCust: Create obj success use class android.app.HwCustActivityImpl
E/CursorResourceWrapper: context is wrong!
I/System.out: AmeSQLite連接資料庫:---com.heartrate.utils.DataActivity@623e598----amedb.db----null----1
SQLite寫入資料:-------com.heartrate.utils.AmeOpenHelper@8cd41f1
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.heartrate.activity, PID: 21060
java.lang.RuntimeException: Error receiving broadcast Intent { act=com.ainia.ble.RETURN_BLE_DATA flg=0x10 (has extras) } in com.heartrate.fragment.StepCounterFragment$2@ebe1e72
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_58300(LoadedApk.java:1448)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:299)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:266)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:206)
at com.heartrate.utils.DataActivity.initEvetn(DataActivity.java:187)
at com.heartrate.utils.DataActivity.addList(DataActivity.java:132)
at com.heartrate.my.MeasurementData.setMeasurementData(MeasurementData.java:283)
at com.heartrate.fragment.StepCounterFragment$2.onReceive(StepCounterFragment.java:59)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_58300(LoadedApk.java:1435)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
I/Process: Sending signal. PID: 21060 SIG: 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/270336.html
標籤:Android
下一篇:exoplayer2音軌切換MappedTrackInfo.getTrackGroups(int)' on a null object reference
