Приложение Android закрывается при выполнении этого запроса - PullRequest
0 голосов
/ 30 июня 2011

Привет, я пытаюсь выполнить этот запрос, но каждый раз, когда я запускаю в эмуляторе, он показывает сообщение принудительного закрытия.Кто-то, пожалуйста, скажите мне что не так в запросе?

 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 голосов
/ 30 июня 2011

Попробуйте опубликовать свой вывод logcat, и мы, вероятно, сможем помочь в дальнейшем, но на первый взгляд я вижу пару потенциальных проблем:

  • Если столбец UsernName не существует, getColumnIndex() вернется-1, что вызовет проблемы с cur.getString()
  • Если ваш запрос не вернет никаких результатов, оба параметра cur.getString и cur.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" )
0 голосов
/ 30 июня 2011

Я рекомендую вам сделать что-то подобное, у меня это работает нормально:

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;
}

Затем сделайте все, что вы хотите, с полученными данными в курсоре

0 голосов
/ 30 июня 2011

можете ли вы опубликовать logcat?

Я думаю, что ваша проблема связана с синтаксисом выбранного аргумента

попробуйте добавить \ как это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...