- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个使用数据库的新 Android 应用程序。我使用类似的代码来创建和复制数据库,但由于某种原因它不起作用。想不通,求助日志猫:
07-03 21:38:54.260: E/AndroidRuntime(12172): FATAL EXCEPTION: main
07-03 21:38:54.260: E/AndroidRuntime(12172): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{lv.revopeng.guessthelocation/lv.revopeng.guessthelocation.LevelActivity}: java.lang.NullPointerException
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.os.Handler.dispatchMessage(Handler.java:99)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.os.Looper.loop(Looper.java:123)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-03 21:38:54.260: E/AndroidRuntime(12172): at java.lang.reflect.Method.invokeNative(Native Method)
07-03 21:38:54.260: E/AndroidRuntime(12172): at java.lang.reflect.Method.invoke(Method.java:521)
07-03 21:38:54.260: E/AndroidRuntime(12172): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-03 21:38:54.260: E/AndroidRuntime(12172): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-03 21:38:54.260: E/AndroidRuntime(12172): at dalvik.system.NativeStart.main(Native Method)
07-03 21:38:54.260: E/AndroidRuntime(12172): Caused by: java.lang.NullPointerException
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:112)
07-03 21:38:54.260: E/AndroidRuntime(12172): at lv.revopeng.guessthelocation.DataBaseHelper.open(DataBaseHelper.java:114)
07-03 21:38:54.260: E/AndroidRuntime(12172): at lv.revopeng.guessthelocation.DataBaseHelper.getLastId(DataBaseHelper.java:128)
07-03 21:38:54.260: E/AndroidRuntime(12172): at lv.revopeng.guessthelocation.LevelActivity.<init>(LevelActivity.java:31)
07-03 21:38:54.260: E/AndroidRuntime(12172): at java.lang.Class.newInstanceImpl(Native Method)
07-03 21:38:54.260: E/AndroidRuntime(12172): at java.lang.Class.newInstance(Class.java:1429)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
07-03 21:38:54.260: E/AndroidRuntime(12172): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
07-03 21:38:54.260: E/AndroidRuntime(12172): ... 11 more
数据库助手.java:
public class DataBaseHelper extends SQLiteOpenHelper {
// The Android's default system path of your application database.
private static String DB_PATH = "/data/data/lv.revopeng.guessthelocation/databases/";
private static String DB_NAME = "GuessTheLocationTest.db";
public static final String TABLE_NAME1 = "gtl_levels";
public static final String WHATTODONOW_COLUMN_ID = "_id";
public static final String WHATTODONOW_COLUMN_INFO = "levelInfo";
public static final String WHATTODONOW_COLUMN_ANSWER = "levelAnswer";
public static final String WHATTODONOW_COLUMN_IMAGE = "levelImage";
public static final String WHATTODONOW_COLUMN_CLEARED = "levelCleared";
private DataBaseHelper openHelper;
private SQLiteDatabase myDataBase;
private final Context myContext;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} else {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException {
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException {
// Open the database
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase myDataBase, int oldVersion,
int newVersion) {
}
public DataBaseHelper open() throws SQLException {
openHelper = new DataBaseHelper(myContext);
myDataBase = openHelper.getWritableDatabase();
return this;
}
public void closee() {
openHelper.close();
}
String[] columns = new String[] { WHATTODONOW_COLUMN_ID,
WHATTODONOW_COLUMN_INFO, WHATTODONOW_COLUMN_ANSWER,
WHATTODONOW_COLUMN_IMAGE, WHATTODONOW_COLUMN_CLEARED };
public int getLastId() {
int id = 0;
open();
final String MY_QUERY = "SELECT MAX(_id) AS _id FROM " + TABLE_NAME1;
Cursor mCursor = myDataBase.rawQuery(MY_QUERY, null);
try {
if (mCursor.getCount() > 0) {
mCursor.moveToFirst();
id = mCursor.getInt(0);
mCursor.close();
close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
}
return id;
}
在 LevelActivity.java 上,调用了 createDataBase() 方法,并且在第一次使用 DataBaseHelper 时出现错误。
编辑:对我来说,getLastId 看起来像是 null,但它不应该是 null,因此访问数据库时出现问题。我查看了文件资源管理器,数据库在那里,其中的信息是正确的。
最佳答案
发现我的错误。在创建数据库之前,我调用了一个从数据库中获取数据的函数。
关于java - 使用 SQLiteOpenHelper 时 ContextWrapper.openOrCreateDatabase 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765374/
我注意到当我右键单击该项目并选择“作为 Android 应用程序运行”时,openOrCreateDatabase 只能在模拟器中使用,而不能在手机中使用。我已经检查了 DDMS,数据库是通过模拟器成
我有我的 DAO 类,当我调用我的类 conexao 时,该方法返回 null,但为什么? public void criarBanco() { Conexao conexao = n
我需要帮助。我有一个带有自定义适配器的 ListView,在这个 ListView 中我有一个 CheckBox 并且在 onClick 方法中应该更新我的数据库中的一个表。我的 CheckBox 的
我在打开数据库时在我的 EhActivity 类中遇到 NullPointerException public class EHActivity extends Activity { ArrayLi
我有以下 DBAdapter(这不是全部,但它是相关代码)。 private final String DATABASE_NAME = "seller"; private final String D
知道如何更新使用 openorcreatedatabase 创建的 sqlite 数据库。问题是该应用程序已经在市场上发布。新版本的应用程序向数据库添加了字段。 我试过这个方法 package com
我正在尝试访问数组适配器内的数据库以从列表中删除项目。但代码无法解析 openOrCreateDatabase 方法或符号 MODE_PRIVATE。 我的代码: public class worko
我创建了一个带有服务的程序 - 该服务是“START_STICKY”。因此,当我关闭程序(我正在使用 Advanced Task Killer 来终止程序)时,服务会自动重新启动,但这会出现问题,因为
当我打电话 myDB = this.openOrCreateDatabase("DatabaseName", MODE_PRIVATE, null); 数据库文件是在哪里创建的? 我到处都找不到。 o
Android 在两个不同的类中有 openOrCreateDatabase:SQLiteDatabase和 Context .请问它们有什么区别? 与此同时,我正在使用单例类来维护我的数据库。如果我
我正在尝试按如下方式打开数据库: SQLiteDatabase myDatabase; myDatabase = openOrCreateDatabase("sudoku.db", Context.M
我正在制作一个使用数据库的新 Android 应用程序。我使用类似的代码来创建和复制数据库,但由于某种原因它不起作用。想不通,求助日志猫: 07-03 21:38:54.260: E/AndroidR
我正在尝试学习 sqlite for android。我创建了一个 Helper 类,它应该打开我的数据库并执行任何帮助类所做的事情。 我的问题是由于这个错误我什至无法打开数据库: android.d
我收到此日志警告消息(在运行 stock 4.4 的 Nexus 4 上): Failed to chmod(/storage/emulated/0/Android/data/com.myapp/my
我是一名优秀的程序员,十分优秀!