2012-01-25 65 views
2

我想在我的应用程序中实现搜索,但如果我想查询应用程序强制关闭与java.lang.NullPointerExceptionFTS3 SQLite数据库查询的

我知道它表示,有些东西没有初始化。但我无法弄清楚什么。


首先,我的数据库:

db.execSQL("CREATE VIRTUAL TABLE " + TABLE_FTS 
+ " USING fts3(" + COL_ID + ", " + COL_KEY_NAME + ", " 
+ COL_KEY_1+ " , " + COL_KEY_3 + ", " + COL_KEY_3 + " " + ");"); 

,并充满了示例设置:

db.execSQL("INSERT INTO " + TABLE_FTS + " (data1, data2, data3, data4) VALUES ('Test1', 'Test2', 'Test3', 'Test4')"); 
db.execSQL("INSERT INTO " + TABLE_FTS + " (data1, data2, data3, data4) VALUES ('Test1_2', 'Test2_2', 'Test3_2', 'Test4_2')"); 


我的活动很简单,启动什么,抓住搜索意图和做查询。

DatabaseHelper helper = new DatabaseHelper(this); 
database = helper.getWritableDatabase(); 

活动是singleTop模式,我用这个方法捕捉意图和查询字符串:http://developer.android.com/guide/topics/search/search-dialog.html#LifeCycle


现在,我用不同的查询方式:

首先,简单的游标:

public Cursor sampleQuery(String query) { 
    tmp = "SELECT * FROM " + TABLE_FTS + " WHERE data1 MATCH '" + query + "'"; 
    return database.rawQuery(tmp, null); 
} 

给我一个FC。

尝试另:

public Cursor queryFTS(String query) { 
     assert !TextUtils.isEmpty(query) : "query must not be an empty string!"; 

     return database.query(DatabaseHelper.TABLE_FTS, 
       new String[] { DatabaseHelper.COL_KEY_NAME, DatabaseHelper.COL_KEY_WEBURL, DatabaseHelper.COL_KEY_STREAMURL, DatabaseHelper.COL_ID }, 
       DatabaseHelper.TABLE_FTS + " MATCH ?", 
       new String[] { appendWildcard(query) }, 
       null, null, null); 
    } 

    private String appendWildcard(String query) { 
     if (TextUtils.isEmpty(query)) return query; 

     final StringBuilder builder = new StringBuilder(); 
     final String[] splits = TextUtils.split(query, " "); 

     for (String split : splits) 
      builder.append(split).append("*").append(" "); 

     return builder.toString().trim(); 
    } 

,并得到一个FC,太。

我不保存堆栈跟踪,但我提醒我,跟踪一直向我展示我的查询返回并执行的代码。我做错了什么?


堆栈跟踪:

01-25 22:02:20.324:E/AndroidRuntime(5025):致命异常:主
01-25 22:02:20.324:E/AndroidRuntime( 5025): 了java.lang.RuntimeException:无法启动活动
ComponentInfo {de.arvidg.onlineradio/de.arvidg.onlineradio.SearchActivity}: 显示java.lang.NullPointerException 01-25 22:02:20.324: è/AndroidRuntime(5025):at android.app.ActivityThread.perfo rmLaunchActivity(ActivityThread.java:1956)
01-25 22:02:20.324:E/AndroidRuntime(5025):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-25 22:02 :20.324:E/AndroidRuntime(5025):at android.app.ActivityThread.access $ 600(ActivityThread.java:123)
01-25 22:02:20.324:E/AndroidRuntime(5025):at android.app .ActivityThread $ H.handleMessage(ActivityThread.java:1147)
01-25 22:02:20.324:E/AndroidRuntime(5025):at android.os.Handler.dispatchMessage(Handler.java:99)
01- 25 22:02:20。324:E/AndroidRuntime(5025):在 android.os.Looper.loop(Looper.java:137)
01-25 22:02:20.324: E/AndroidRuntime(5025):at android.app.ActivityThread (主动方法)
01-25 22:02 :20.324:E/AndroidRuntime(5025):在 java.lang.reflect.Method.invoke(Method.java:511)
01-25 22:02:20.324: E/AndroidRuntime(5025):在 com。 android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
01-25 22:02:20.324:E/AndroidRun time(5025):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-25 22:02:20.324:E/AndroidRuntime(5025):at dalvik.system.NativeStart .main(Native Method)
01-25 22:02:20.324: E/AndroidRuntime(5025):引起:java.lang.NullPointerException
01-25 22:02:20.324:E/AndroidRuntime(5025):在 de.arvidg.test.SearchActivity.sampleQuery(SearchActivity.java:81)
01-25 22:02:20.324:E/AndroidRuntime(5025):在 de.arvidg.test.SearchActivity.doSearch(SearchActivity .java:76)
01-25 22:02:20.324:E/AndroidRuntime(5025):在 de.arvidg.test.SearchActivity.handleIntent(SearchActivity.java:62)
01-25 22:02:20.324:E/AndroidRuntime(5025):at de.arvidg.test.SearchActivity.onCreate(SearchActivity.java :37)
01-25 22:02:20.324:E/AndroidRuntime(5025):在 android.app.Activity.performCreate(Activity.java:4465)
01-25 22:02:20.324:电子/ AndroidRuntime(5025):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-25 22:02:20.324:E/AndroidRuntime(5025):at android.app.ActivityThread.performLaunchActivity( ActivityThread.java:1920)
01-25 22:02:20.324:E/AndroidRuntime(5025):... 11更

81行:

public Cursor sampleQuery(String query) { 
    String tmp = "SELECT * FROM " + DatabaseHelper.TABLE_FTS + " WHERE data1 MATCH '" + query + "'"; 
    return database.rawQuery(tmp, null); **<--- Line 81** 
} 

其它线仅从意图回溯到线路81(意思,那里没什么特别的^^)

+0

堆栈跟踪和完整代码可能会有所帮助。从一半信息很难预测。但是,我的猜测是查询中的'数据库'为空。 – kosa

+0

是的,堆栈跟踪在调试FC时几乎是必需的:s。 – Jens

+0

这正是我的想法。但为什么它是空的?我正确地启动了它。 – Leandros

回答

0

解决了!数据库没有启动正确。

这是在onCreate方法。将其添加到我的搜索方法解决了它。