Android SQLite数据库返回Null
我正在开发一个应用程序,该应用程序可以通过数据库查询来膨胀和自动完成文本视图。我遇到的问题是,当我调用该方法来膨胀TextView时,我无法访问数据库 TextChanged Listener(取自CustomAutocompleteTextChangedListener.java): 堆栈跟踪:Android SQLite数据库返回Null,android,database,sqlite,Android,Database,Sqlite,我正在开发一个应用程序,该应用程序可以通过数据库查询来膨胀和自动完成文本视图。我遇到的问题是,当我调用该方法来膨胀TextView时,我无法访问数据库 TextChanged Listener(取自CustomAutocompleteTextChangedListener.java): 堆栈跟踪: 02-01 10:50:08.201 14164-14164/com.vindsiden.windwidget E/AndroidRuntime﹕ FATAL EXCEPTION: main Pro
02-01 10:50:08.201 14164-14164/com.vindsiden.windwidget E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.vindsiden.windwidget, PID: 14164
java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.vindsiden.windwidget.config.DatabaseHandler.read(DatabaseHandler.java:143)
at com.vindsiden.windwidget.Vindsiden.getItemsFromDb(Vindsiden.java:483)
at com.vindsiden.windwidget.config.CustomAutocompleteTextChangedListener.onTextChanged(CustomAutocompleteTextChangedListener.java:38)
at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
at android.widget.TextView.handleTextChanged(TextView.java:7467)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:675)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:437)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
完整代码可通过以下方式获得:
您传递给
SQLiteOpenHelper
父构造函数的上下文是null
第38行是什么CustomAutocompleteTextChangedListener.java
?它来自我使用的示例。它建议创建一个CustomAutocompleteTextChangedListener来调用数据库并正确膨胀自动完成列表。(这是第一段代码)是否有更聪明的方法来实现这一点?从github链接上看,您是在暗示活动类错误。这个vindsiden
是空的,我想我应该怎么做才能正确呢?读一下拉格哈夫·苏德的答案,你会明白,这听起来可能很傻。但是我该怎么解决这个问题呢?杰普:代码还没有真正清理干净。这就是你看到的stacktrace的原因。问题中的代码没有显示如何创建帮助器。
public List<Sted> read(String searchTerm) {
List<Sted> recordList = new ArrayList<Sted>();
//Select query
String sql = "";
sql += "SELECT * FROM" + TABLE_PLACES;
sql += " WHERE " + COLUMN_NAME + " LIKE '%" + searchTerm + "%'";
sql += " ORDER BY " + COLUMN_ID + " DESC";
sql += " LIMIT 0,5";
//The line under is what is returning null
SQLiteDatabase database = this.getWritableDatabase();
//execute the query
Cursor cursor = database.rawQuery(sql, null);
//Looping rows and adding to the list
if (cursor.moveToFirst()) {
do {
String objectName = cursor.getString(cursor.getColumnIndex(COLUMN_NAME));
Sted sted = new Sted();
recordList.add(sted);
} while (cursor.moveToNext());
}
cursor.close();
database.close();
return recordList;
}
public Sted findPlace(String placeName) {
String query = "Select * FROM " + TABLE_PLACES + " WHERE " + COLUMN_NAME + " = \"" + placeName + "\"";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(query, null);
Sted sted = new Sted();
if (cursor.moveToFirst()) {
cursor.moveToFirst();
sted.set_id(Integer.parseInt(cursor.getString(0)));
sted.set_stedsNavn(cursor.getString(1));
sted.set_url(cursor.getString(2));
cursor.close();
} else {
sted = null;
}
database.close();
return sted;
}
02-01 10:50:08.201 14164-14164/com.vindsiden.windwidget E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.vindsiden.windwidget, PID: 14164
java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.vindsiden.windwidget.config.DatabaseHandler.read(DatabaseHandler.java:143)
at com.vindsiden.windwidget.Vindsiden.getItemsFromDb(Vindsiden.java:483)
at com.vindsiden.windwidget.config.CustomAutocompleteTextChangedListener.onTextChanged(CustomAutocompleteTextChangedListener.java:38)
at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
at android.widget.TextView.handleTextChanged(TextView.java:7467)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:675)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:437)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)