java - android中的NullPointerException,可能是数据库问题

标签 java android

这是代码(我认为生成 NullPointerException 的地方):

public String getData(String s1,String s2,String s3,String s4){

        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        SQLiteDatabase db = databaseHelper.getWritableDatabase();

        String columns[] = new String[]{"alphabet","st1","st2","st3","st4" };
        Cursor c = db.query("capitals", columns, null, null,null,null, null);
        String result = "";

        int calpha = c.getColumnIndex("alphabet");
        int cst1 = c.getColumnIndex("st1");
        int cst2 = c.getColumnIndex("st2");
        int cst3 = c.getColumnIndex("st3");
        int cst4 = c.getColumnIndex("st4");

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){

            if(c.getString(cst1).equals(s1) && c.getString(cst2).equals(s2) && c.getString(cst3).equals(s3) && c.getString(cst4).equals(s4))
                result = c.getString(calpha);
            else
                result = null;

        }

        return result;
    }

日志内容:

03-19 21:27:34.263: E/AndroidRuntime(26498): FATAL EXCEPTION: main
03-19 21:27:34.263: E/AndroidRuntime(26498): java.lang.NullPointerException
03-19 21:27:34.263: E/AndroidRuntime(26498):    at learn.myandroidapp.hr.HandwritingRecognitionCanvas.getData(HandwritingRecognitionCanvas.java:213)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at learn.myandroidapp.hr.HandwritingRecognitionCanvas$1.onClick(HandwritingRecognitionCanvas.java:103)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.view.View.performClick(View.java:3511)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.view.View$PerformClick.run(View.java:14105)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.os.Handler.handleCallback(Handler.java:605)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.os.Looper.loop(Looper.java:137)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at android.app.ActivityThread.main(ActivityThread.java:4424)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at java.lang.reflect.Method.invokeNative(Native Method)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at java.lang.reflect.Method.invoke(Method.java:511)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-19 21:27:34.263: E/AndroidRuntime(26498):    at dalvik.system.NativeStart.main(Native Method)
03-19 21:27:36.604: I/Process(26498): Sending signal. PID: 26498 SIG: 9

最佳答案

或者:

  • 传入的四个字符串之一是null。在方法开始时检查传入的字符串。

  • 从数据库中提取的字符串之一是null。并添加一些日志记录以查看数据库中的任何字符串是否为 null

如果你想让两个null字符串被认为是相等的,那么你需要扩展你的比较如下:

if ((s1 == null && c.isNull(cst1)) || 
    (s1 != null && !c.isNull(cst1) && s1.equals(c.getString(cst1)))
    ... repeat for the other three string-pairs       
   ) 

关于java - android中的NullPointerException,可能是数据库问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773520/

相关文章:

android - 如何自定义一个TimePickerDialog?

android - 为什么 Intent 总是使用 FLAG_ACTIVITY_FORWARD_RESULT 和 FLAG_ACTIVITY_PREVIOUS_IS_TOP?

android - 按下后退箭头图标时如何将 Intent 数据发送回上一个 Activity ?

java - 如何更新war文件中的xml文件?

java - JDBC 的 rs.getString() 不会返回查询结果的值

java - 比较两个日历对象

java - 使用 list 文件 ClassNotFoundException 从可执行 JAR 启动 JAR 文件时出现问题

java - SpringBoot 不从 yml 配置创建数据源

android - 从 Fragment 调用 Activity 然后返回到 Fragment

java - 我应该如何将这些对象存储在 SQLite 数据库中?