android应用程序强制关闭执行此查询

时间:2011-06-30 08:57:40

标签: android sqlite

您好我正在尝试执行此查询,但每次我在模拟器中运行时,它都会显示强制关闭消息。有人告诉我查询中有什么错误吗?

 public String searchRecord(String f) {

Cursor cur= db.query(DATABASE_TABLE,new String[] { UserName, Age, Sex,DOB}  , UserName +" like 'sa%'" , null ,null ,null ,null , "5");

 cur.moveToFirst();

 return cur.getString(cur.getColumnIndex(UserName));

}

这是logcat。

06-30 15:02:47.342: WARN/dalvikvm(300): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-30 15:02:47.632: ERROR/AndroidRuntime(300): FATAL EXCEPTION: main
06-30 15:02:47.632: ERROR/AndroidRuntime(300): java.lang.ClassCastException: android.text.SpannableStringBuilder
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.menu.san.OptionsmenuActivity$2.onTextChanged(OptionsmenuActivity.java:66)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.widget.TextView.handleTextChanged(TextView.java:6172)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:195)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:132)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.widget.TextView.doKeyDown(TextView.java:4304)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.widget.TextView.onKeyDown(TextView.java:4149)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.KeyEvent.dispatch(KeyEvent.java:1037)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.View.dispatchKeyEvent(View.java:3740)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.app.Activity.dispatchKeyEvent(Activity.java:2063)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.os.Looper.loop(Looper.java:123)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at java.lang.reflect.Method.invokeNative(Native Method)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at java.lang.reflect.Method.invoke(Method.java:521)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-30 15:02:47.632: ERROR/AndroidRuntime(300):     at dalvik.system.NativeStart.main(Native Method)
06-30 15:02:47.812: WARN/ActivityManager(67):   Force finishing activity com.menu.san/.OptionsmenuActivity
06-30 15:02:48.832: WARN/ActivityManager(67): Activity pause timeout for HistoryRecord{44f35b60 com.menu.san/.OptionsmenuActivity}

3 个答案:

答案 0 :(得分:0)

你可以发帖logcat吗?

我认为你的问题来自你的选择参数的语法

尝试添加\,像这样:

USER_LOGIN + " LIKE \"" + login +"\""

答案 1 :(得分:0)

尝试发布你的logcat输出,我们可能会有所帮助,但乍一看我可以看到一些潜在的问题:

  • 如果UsernName列不存在,getColumnIndex()将返回-1,这将导致cur.getString()
  • 出现问题
  • 如果您的查询未返回任何结果,则cur.getStringcur.getColumnIndex都将失败

我建议您将代码更新为:

public String searchRecord(String f) {
    String user;
    Cursor cur= db.query(DATABASE_TABLE,new String[] { UserName, Age, Sex,DOB} , UserName +" like 'sa%'" , null ,null ,null ,null , "5");
    if ( cur.getCount() > 0 ) { // Only attempt to get the UserName if we actually got some results
        cur.moveToFirst();
        user = cur.getString ( cur.getColumnIndex ( UserName ) );
    }
    else { // If no results returned by the query, return a NULL string;
        user = null;
    }
    return user;
}

您可能需要考虑使用getColumnIndexOrThrow代替getColumnIndex,因为它会引发异常,并且会使与缺失列相关的错误更加明显。

另一个问题是你确定UserName,Age,Sex和DOB是变量,还是实际的列名?如果它们是文字列名,则应使用以下查询:

Cursor cur= db.query(DATABASE_TABLE,new String[] { "UserName", "Age", "Sex", "DOB" } , "UserName like 'sa%'" , null ,null ,null ,null , "5");

如果是这样,您还应将getColumnIndex来电更改为:

cur.getColumnIndex ( "UserName" )

答案 2 :(得分:0)

我建议你做这样的事情,它适用于我:

public Cursor SearchRecord(String search) {        
    Cursor c;        
    String[]columns = {UserName, Age, Sex,DOB};
    String Limit = "0,5";

    String query = search != null ? UserName + " LIKE '" + search + "%' " : "";

    c = myDataBase.query(DATABASE_TABLE,columns, query, null, null, null, null, Limit);

    return c;
}

然后使用Cursor

中的检索数据执行任何操作
相关问题