【问题标题】:Why can't my code find my value even though i know it's there?为什么即使我知道它在那里,我的代码也找不到我的价值?
【发布时间】:2013-04-11 08:39:48
【问题描述】:
**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;
}

此代码应该检查我的数据库中的值,如果找到则转到下一页。但我不断收到我添加的未找到值的对话框。我已经检查过该值是否存在,因为我也有一个数据库视图代码。

原木猫。

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)

【问题讨论】:

  • 在执行搜索时使用 log.d 打印值。它会让您准确了解正在发生的事情。
  • 日志由于某种原因导致错误
  • 抱歉添加了这么久
  • 你在 sqlStuff.java 的第 153 行有空指针。这是第 153 行,请检查它,它可能驻留在 getIDSysName() 方法中。
  • 第 153 行在我放置日志的方法的异常部分中。

标签: android database search


【解决方案1】:

这是你的问题:

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

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

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

我认为您在数据库代码中的某个地方遇到了错误,但这里的崩溃是由您的异常处理引起的。

【讨论】:

  • 嗨,根据标准做法,您的观点很好,但我已经测试过,因为我对这样的错误感到好奇,我发现了一些奇怪的东西。如果Log.e(null,"value"); 不会出错,但会出错当Log.e("tag",null);.
  • 我已经找到结果了,现在我必须放置一个 database.open() 和 close();搜索对象的任一侧
【解决方案2】:

由于Mark Allison 指定的原因,日志导致错误。 如果您的代码在添加日志之前运行良好,则无法搜索到的问题的根源可能是区分大小写的搜索。

尝试使用

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

而不是

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

【讨论】:

  • 我尝试了忽略大小写的事情,它什么也没做,但仍然有用,我尝试添加 log d 并更改 tr 值,但仍然出现错误。并且ourDatabase被设置为私有SQLiteDatabaseourDatabase;伙计们还有什么想法,我仍然很难过。
  • 你检查你的Cursor count了吗?
  • 使用日志 d yeh 但我仍然收到错误,它只是没有注册
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2015-05-05
  • 2020-09-19
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多