【发布时间】:2014-08-16 03:42:16
【问题描述】:
我在这里看到很多人都遇到了 iPhone 的这个问题,但这是 Nexus 7 设备。应用程序在发布版本时崩溃,但是当我直接在设备上调试时,不会发生崩溃。我可以说它是该软件的最新、最新版本。
还有其他人遇到这个吗?
发布版本和调试版本甚至在同一个数据库上运行。
这是崩溃的代码(空指针异常 - 行指示):
mTabHost = (TabHost)findViewById(R.id.tabHost);
mTabHost.setup();
mTabHost.setOnTabChangedListener(this);
String className = this.getLocalClassName();
if (surveyID < 68) {
String sql = "Select * FROM L_Options WHERE Type = 'TabSetup' AND Setting = '" + optIncludeSurvey + "' "
+ "AND Value = " + surveyID;
Cursor c = DataBaseConnector.query(sql);
if (c != null) {
if (c.moveToFirst()) {
surveyID = c.getInt(c.getColumnIndex("FK_RecID"));
}
}
}
String sql = "SELECT TS.TextID, TS.TabClass, TS.TabHeaderID, TS.Comments,O.Value "//
+ "FROM L_TabSetup AS TS LEFT JOIN L_Options O ON "//
+ "O.FK_RecID = TS.TabSurveyID AND O.Type = 'TabSetup' AND O.Setting = '" + optIncludeSurvey + "' "//
+ "WHERE TS.ScreenClass = '" + className + "' "//
+ "AND TS.Active = 1 "//
+ "AND O.Active = 1 "//
+ "AND TS.TabSurveyID = " + surveyID + " ";
if (GlobalVars.subjectLeftToRight == 1) {
sql += "ORDER BY TS.DisplayOrder ASC";
} else {
sql += "ORDER BY TS.DisplayOrder DESC";
}
Cursor c = DataBaseConnector.query(sql);
if (c != null) {
if (c.moveToFirst()) {
TabInfo tabInfo = null;
do {
String comment = c.getString(c.getColumnIndex("Comments"));
int includeSurveyID = c.getInt(c.getColumnIndex("Value"));
Class<?> tabClass = getClass(c.getString(c.getColumnIndex("TabClass")));
int tabHeaderID = c.getInt(c.getColumnIndex("TabHeaderID"));
//put in included SurveyID
if (args != null) {
if (args.getInt(optIncludeSurvey, -1) == -1) {
args.putInt(optIncludeSurvey, includeSurveyID);
}
}
else {
args = new Bundle();
args.putInt(optIncludeSurvey, includeSurveyID);
}
String[] texts = Lookups.getText(c.getInt(c.getColumnIndex("TextID")));
//crash line
////////////////////////////////////////////////////////
tabInfo = new TabInfo(tabClass, args, texts, c.getInt(c.getColumnIndex("TextID")), tabHeaderID, comment, surveyID);
//end crash line
//////////////////////////////////////////////////////////
addTab(this, tabInfo);
this.mapTabInfo.put(tabInfo.texts[0], tabInfo);
} while (c.moveToNext());
}
c.close();
c = null;
}
请善待编码实践 - 这是遗留代码。
已编辑:Logcat 文件
08-15 10:07:09.818: E/AndroidRuntime(1221): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assistek.ediary/com.assistek.ediary.SubjectMenuEvent}: java.lang.NullPointerException
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.os.Looper.loop(Looper.java:137)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread.main(ActivityThread.java:5039)
08-15 10:07:09.818: E/AndroidRuntime(1221): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 10:07:09.818: E/AndroidRuntime(1221): at java.lang.reflect.Method.invoke(Method.java:511)
08-15 10:07:09.818: E/AndroidRuntime(1221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-15 10:07:09.818: E/AndroidRuntime(1221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-15 10:07:09.818: E/AndroidRuntime(1221): at dalvik.system.NativeStart.main(Native Method)
08-15 10:07:09.818: E/AndroidRuntime(1221): Caused by: java.lang.NullPointerException
08-15 10:07:09.818: E/AndroidRuntime(1221): at com.assistek.ediary.SubjectMenuEvent.setupTabHost(SubjectMenuEvent.java:255)
08-15 10:07:09.818: E/AndroidRuntime(1221): at com.assistek.ediary.SubjectMenuEvent.onCreate(SubjectMenuEvent.java:96)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.Activity.performCreate(Activity.java:5104)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
08-15 10:07:09.818: E/AndroidRuntime(1221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
08-15 10:07:09.818: E/AndroidRuntime(1221): ... 11 more
相关问题: Reinstalling app does not bring over all the changes of released app android
【问题讨论】:
-
知道哪条线路可能会失败吗?可能值得加载大量 if 语句(用于在设备上进行测试),如果其中一个为 null 以显示解释哪些变量为 null 的错误。在这里也使用 try catch 可能也很有用......调试工作的潜在原因是因为代码运行速度要慢得多,这给了变量不为空的时间(如果在线程或类似线程上启动)
-
我把失败的那行放在代码中。我能够看到 Logcat 中发生了什么。我将做一个 try catch 块来测试这一点。感谢您的观看。
-
不在线程中运行它(我知道设计不好)。
-
你能提供完整的logcat崩溃吗?
-
如上所述,您的 logcat 将在这里很有用。无论如何,线程对于简单的应用程序并不总是一件好事,所以不要担心:)