我已经阅读了许多网站和教程,却无法解决我的问题。 我有一个应用程序,在尝试从数据库中读取数据时出现问题(它可以成功打开数据库)。我知道这不是正确的做法,但我有两个全局字符串(DB_TABLE
和 spinnerPipeLengthText
),我将它们从我的主Activity传递到我的DataBaseHelper类中。当我调用以下代码行来检索特定行中所有列的数据时,我的应用程序崩溃了。
Cursor cursorData = myDataBase.query(CSSTPipeSizingActivity.DB_TABLE, null,
CSSTPipeSizingActivity.spinnerPipeLengthText, null, null, null, null, null);
以下是我的完整getData
方法:
public Cursor getData() {
Cursor cursorData = myDataBase.query(CSSTPipeSizingActivity.DB_TABLE, null,
CSSTPipeSizingActivity.spinnerPipeLengthText, null, null, null, null, null);
if (cursorData != null)
cursorData.moveToFirst();
cursorData.moveToFirst();
CSSTPipeSizingActivity.textViewSize15.setText(cursorData.getString(1));
cursorData.moveToNext();
CSSTPipeSizingActivity.textViewSize19.setText(cursorData.getString(1));
cursorData.moveToFirst();
CSSTPipeSizingActivity.textViewSize25.setText(cursorData.getString(1));
cursorData.moveToNext();
CSSTPipeSizingActivity.textViewSize31.setText(cursorData.getString(1));
cursorData.moveToFirst();
CSSTPipeSizingActivity.textViewSize37.setText(cursorData.getString(1));
cursorData.moveToNext();
CSSTPipeSizingActivity.textViewSize46.setText(cursorData.getString(1));
cursorData.moveToNext();
CSSTPipeSizingActivity.textViewSize62.setText(cursorData.getString(1));
cursorData.close();
return cursorData;
} // end method getData
从我的代码可以看出,我试图将数据直接输入到main.xml
文件中的文本视图中。我不知道这是否可能,但这是我以后需要解决的问题。现在我需要获取数据。
以下是我的logcat:
03-12 19:23:33.587: D/AndroidRuntime(20191): Shutting down VM
03-12 19:23:33.587: W/dalvikvm(20191): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-12 19:23:33.617: E/AndroidRuntime(20191): FATAL EXCEPTION: main
03-12 19:23:33.617: E/AndroidRuntime(20191): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.skyesmechanical.CSSTPipeSizing/com.skyesmechanical.CSSTPipeSizing.CSSTPipeSizingActivity}: java.lang.NullPointerException
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.os.Looper.loop(Looper.java:123)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-12 19:23:33.617: E/AndroidRuntime(20191): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 19:23:33.617: E/AndroidRuntime(20191): at java.lang.reflect.Method.invoke(Method.java:507)
03-12 19:23:33.617: E/AndroidRuntime(20191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-12 19:23:33.617: E/AndroidRuntime(20191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-12 19:23:33.617: E/AndroidRuntime(20191): at dalvik.system.NativeStart.main(Native Method)
03-12 19:23:33.617: E/AndroidRuntime(20191): Caused by: java.lang.NullPointerException
03-12 19:23:33.617: E/AndroidRuntime(20191): at com.skyesmechanical.CSSTPipeSizing.DataBaseHelper.getData(DataBaseHelper.java:173)
03-12 19:23:33.617: E/AndroidRuntime(20191): at com.skyesmechanical.CSSTPipeSizing.CSSTPipeSizingActivity.onCreate(CSSTPipeSizingActivity.java:105)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-12 19:23:33.617: E/AndroidRuntime(20191): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-12 19:23:33.617: E/AndroidRuntime(20191): ... 11 more
感谢您的帮助!
return x
之后什么也不会发生(在这方面它很像break)。关键是你要么需要返回游标,那么就不应该关闭它,要么需要关闭它并且不返回任何东西。我修改了我的答案,展示了我在当前项目中如何处理。 - Barak