Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite导致崩溃_Android_Sqlite_Crash - Fatal编程技术网

Android SQLite导致崩溃

Android SQLite导致崩溃,android,sqlite,crash,Android,Sqlite,Crash,每当调用此方法时,我的应用程序几乎会立即崩溃,而我已经花了几个小时来处理它。我对SQL非常陌生,甚至对Android编程也比较陌生,所以这里的代码有什么问题吗?我想我可能遗漏了与光标有关的其他内容,但我没有任何人要问。提前感谢: public String fillTimetable(String day, String week, String lesson){ String[] column = new String[]{KEY_SUBJECT}; String select

每当调用此方法时,我的应用程序几乎会立即崩溃,而我已经花了几个小时来处理它。我对SQL非常陌生,甚至对Android编程也比较陌生,所以这里的代码有什么问题吗?我想我可能遗漏了与光标有关的其他内容,但我没有任何人要问。提前感谢:

public String fillTimetable(String day, String week, String lesson){
    String[] column = new String[]{KEY_SUBJECT};
    String selection = "WHERE "+KEY_DAY+" = '"+day+"' AND "+KEY_WEEK+" = '"+week+"' AND "+KEY_LESSON+" = '"+lesson+"';";
    Cursor c = ourDatabase.query(DATABASE_TABLE, column, selection, null, null,
            null, null);

    int iSubject = c.getColumnIndex(KEY_SUBJECT);
    return c.getString(iSubject);

}//end fillTimetable
日志Cat报告:

02-27 22:17:52.180: E/AndroidRuntime(8062): FATAL EXCEPTION: main
02-27 22:17:52.180: E/AndroidRuntime(8062): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.shearer.schooltimetable/com.shearer.schooltimetable.Tabs}: java.lang.NullPointerException
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.os.Looper.loop(Looper.java:137)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread.main(ActivityThread.java:5041)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at java.lang.reflect.Method.invoke(Method.java:511)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at dalvik.system.NativeStart.main(Native Method)
02-27 22:17:52.180: E/AndroidRuntime(8062): Caused by: java.lang.NullPointerException
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.Activity.findViewById(Activity.java:1839)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at com.shearer.schooltimetable.Tabs.<init>(Tabs.java:19)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at java.lang.Class.newInstanceImpl(Native Method)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at java.lang.Class.newInstance(Class.java:1319)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
02-27 22:17:52.180: E/AndroidRuntime(8062):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
02-27 22:17:52.180: E/AndroidRuntime(8062):     ... 11 more
02-27 22:17:52.180:E/AndroidRuntime(8062):致命异常:主
02-27 22:17:52.180:E/AndroidRuntime(8062):java.lang.RuntimeException:无法实例化活动组件信息{com.shearer.schooltime/com.shearer.schooltime.Tabs}:java.lang.NullPointerException
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread.access$600(ActivityThread.java:141)
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.os.Handler.dispatchMessage(Handler.java:99)上
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.os.Looper.loop(Looper.java:137)上
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread.main(ActivityThread.java:5041)上
02-27 22:17:52.180:E/AndroidRuntime(8062):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-27 22:17:52.180:E/AndroidRuntime(8062):位于java.lang.reflect.Method.invoke(Method.java:511)
02-27 22:17:52.180:E/AndroidRuntime(8062):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-27 22:17:52.180:E/AndroidRuntime(8062):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-27 22:17:52.180:E/AndroidRuntime(8062):在dalvik.system.NativeStart.main(本机方法)
02-27 22:17:52.180:E/AndroidRuntime(8062):由以下原因引起:java.lang.NullPointerException
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.Activity.findViewById(Activity.java:1839)
02-27 22:17:52.180:E/AndroidRuntime(8062):在com.shearer.schooltime.Tabs.(Tabs.java:19)
02-27 22:17:52.180:E/AndroidRuntime(8062):位于java.lang.Class.newInstanceImpl(本机方法)
02-27 22:17:52.180:E/AndroidRuntime(8062):位于java.lang.Class.newInstance(Class.java:1319)
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.Instrumentation.newActivity(Instrumentation.java:1054)上
02-27 22:17:52.180:E/AndroidRuntime(8062):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
02-27 22:17:52.180:E/AndroidRuntime(8062):。。。还有11个
从堆栈跟踪:

Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1839)
at com.shearer.schooltimetable.Tabs.<init>(Tabs.java:19)
使用
占位符作为带有
selectionArgs
的文本也是明智的,例如,避免SQL注入,例如:

String selection = KEY_DAY+" = ? AND "+KEY_WEEK+" = ? AND "+KEY_LESSON+" = ?";
String[] selectionArgs = new String[] { day, week, lesson };
Cursor c = ...query(..., selection, selectionArgs, ...);
query()
之后,
光标
尚未指向有效的结果行。在尝试使用
getString()
访问行数据之前,请使用
moveTo…
方法之一将其移动:


如上图所示,显式关闭光标也是一个好主意。

您丢失了一些东西……崩溃的日志。请编辑并添加您的帖子,这样我们可以帮助您更轻松。由于光标位于第一行之前,您应该始终将其移动到第一条记录:
c.moveToFirst()在消费它之前。从:
返回:光标对象,位于第一个条目之前。
我按照您的说明更改了代码,试图修复它,但我的应用程序仍在崩溃。我遇到了这个错误:java.lang.RuntimeException:无法启动activityComponentInfo{com.shearer.schooltime/com.shearer.schooltime.Tabs}:java.lang.NullPointerException,我认为这可能是因为我没有考虑如果数据库返回“null”该怎么办,但这仍然没有解决它。有什么想法吗?SorryLook查看NPE异常的行号,并查看它在代码中指向的位置。它指向我尝试从数据库中提取数据的位置,这不是避免NPE的好方法吗?-如果(temp!=null){tvs[i].setText(temp);}则
tvs
tvs[i]
为null。您可以使用调试器来查找。然而,它似乎不再与这个问题相关,所以如果你有问题,考虑发布一个新的问题。
String selection = KEY_DAY+" = ? AND "+KEY_WEEK+" = ? AND "+KEY_LESSON+" = ?";
String[] selectionArgs = new String[] { day, week, lesson };
Cursor c = ...query(..., selection, selectionArgs, ...);
Cursor c = ....;
String result = null;
if (c.moveToFirst()) {
    int iSubject = c.getColumnIndex(KEY_SUBJECT);
    result = c.getString(iSubject);
}
c.close();
return result;