为什么我的代码能够找到我的价值,即使我知道它在那里?

时间:2013-04-11 08:39:49

标签: android database search

**Here im trying to confirm that if a value is found so that i can move to the next page.**     

    public void onClick(View arg0) {
    sqlStuff search1 = new sqlStuff(search_page.this);
    switch (arg0.getId()) {

    case R.id.search_button:


        boolean found = false;
        String Systname = editText1.getText().toString();


        String[] IDSysNames = search1.getIDSysName();
        for(int i = 0; i < IDSysNames.length; i++)
        {
            if(Systname.equals(IDSysNames[i].toString()))
            {
              found = true;
              number = i;
            }
        }



        if(found==true)
        {
         Intent search = new Intent("com.MC.ChemPal.RESULT");
         startActivity(search);

        }
        else
        {
            Dialog d = new Dialog(this);
            d.setTitle("result not found");
            TextView tv = new TextView(this);
            d.setContentView(tv);
            d.show();
        }
        break;

这是我尝试获取以下值的部分

public String[] getIDSysName()
{
    String[] result = new String[0];

    try
    {
        String[] columns = new String[] {KEY_SYSNAME };
        Cursor c  =  ourDatabase.query(DATABASE_TABLE, columns, null,  null, null, null, null);
        int iSysName = c.getColumnIndex(KEY_SYSNAME);

        int i = 0;
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            i++;
        }

        result = new String[i];
        i = 0;
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result[i] = c.getString(iSysName);
            String lk = null;
            Log.d(lk, result[i]);
                            i++;
        }

    }
    catch(Exception e)
    {
      String tr = null;
          Log.e(tr, e.getMessage());    
    }

    return result;
}

此代码应该检查我的数据库中的值,如果找到它则转到下一页。但我继续得到我添加的未找到的值的对话框。我已经检查了值,因为我有一个数据库视图代码。

Log cat。

FATAL EXCEPTION:MAIN
java.lang.NullPointerException:println needs a message
at android.util.Log.printlnNative(Native Method)
at android.util.Log.e(Log.java:230)
at com.MC.ChemPal.SqlDStuff.getIDSysName(sqlStuff.java.153)
at com.MC.ChemPal.search_page.onClick(search_page.java:42)
at android.view.View.performClick(View.java.2485)
at android.view.View$PerformClick.run(View.java.9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(zygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:0)

这是你的问题:

  String tr = null;
  Log.e(tr, e.getMessage());    

Log.e的第一个参数应该是包含TAG的String对象。试试这个:

  String tr = "My Tag";
  Log.e(tr, e.getMessage());    

我认为您在数据库代码中的某处出现了错误,但此处的崩溃是由异常处理引起的。

答案 1 :(得分:0)

由于Mark Allison指定的原因,

日志会导致错误。 如果您的代码在添加日志之前工作正常,则未获取搜索项的问题的根源可能是区分大小写搜索。

尝试使用

Systname.equalsIgnoreCase(IDSysNames[i].toString())

而不是

Systname.equals(IDSysNames[i].toString())