这是代码(我认为生成 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/