我不断收到这些崩溃报告,但我无法弄清楚原因。这来自Kindle Fire,它们似乎是我遇到错误的唯一设备。我没有人可以测试,但是有人知道为什么这个NullPointerException只发生在Kindle Fire上吗?它与SQLite不兼容吗?我自己的测试设备或其他Android设备的崩溃报告都没有任何问题。任何见解都将不胜感激。
另外,我可以从代码中找出任何应该导致此NullPointerException的内容,因此我不知道是什么让它只在Kindle Fire上发生..
java.lang.RuntimeException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2060)
at android.app.ActivityThread.access$600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1181)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4558)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at org.orman.dbms.ResultList$ResultRow.getColumn(ResultList.java:31)
at org.orman.mapper.ReverseMapping.map(ReverseMapping.java:51)
at org.orman.mapper.Model.fetchQuery(Model.java:439)
at com.appsbydesign.soundfxfree.helpers.SQLiteHelper.getSounds(SQLiteHelper.java:23)
at com.appsbydesign.soundfxfree.SoundsActivityGrid.onStartSoundsActivityGrid (SoundsActivityGrid.java:260)
at com.appsbydesign.soundfxfree.SoundsActivityGrid.onStart(SoundsActivityGrid.java)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
at android.app.Activity.performStart(Activity.java:4646)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2008)
... 11 more
以下是我的SQLite Helper类的代码的一部分,错误日志说明问题来自:
public class SQLiteHelper {
public static List<Category> getCategories() {
return Model.fetchAll(Category.class);
}
public static List<Sound> getSounds(long categoryId) {
Query query = ModelQuery.select().from(Sound.class)
.where(C.eq(Sound.Columns.CATEGORY, categoryId)).getQuery();
return Model.fetchQuery(query, Sound.class);
}
第23行是这一行:返回Model.fetchQuery(query,Sound.class);
以下是我的SoundActivityGrid类中的代码的一部分,该代码也在错误日志中调用。第260行是案例1:sounds = SQLiteHelper.getSounds(categoryId);在代码中:
@Override
protected void onStart() {
super.onStart();
switch (activityName) {
case 1:
sounds = SQLiteHelper.getSounds(categoryId);
break;
case 2:
sounds = SQLiteHelper.getRecordedCategory(categoryId);
break;
case 3:
sounds = SQLiteHelper.getFavouriteSounds(categoryId);
break;
case 5:
List<Sound> timedSounds = SQLiteHelper.getSounds(categoryId);
sounds = new ArrayList<Sound>();
for (Sound sound : timedSounds) {
EntityList<Sound, Timer> timers = sound.getTimers();
if (timers.size() > 0) {
sounds.add(sound);
}
}
break;
case 7:
List<Sound> timedSoundsGrid = SQLiteHelper.getSounds(categoryId);
sounds = new ArrayList<Sound>();
for (Sound sound : timedSoundsGrid) {
EntityList<Sound, Timer> timers = sound.getTimers();
if (timers.size() > 0) {
sounds.add(sound);
}
}
break;
case 6:
sounds = SQLiteHelper.getwidgetPlaySound(categoryId);
break;
}
我无法访问org.orman.dbms。
编辑:
我能够访问orman dbms中的ResultList代码,这就是它所说的:
public class ResultList {
private String[] columnNames;
private Map<String, Integer> columnNameMap;
private Object[][] records;
public final class ResultRow {
private Map<String, Integer> columnNameMap;
private Object[] row;
private ResultRow(Map<String, Integer> columnNameMap, Object[] row) {
this.columnNameMap = columnNameMap;
this.row = row;
}
public Object getColumn(String columnName) {
return row[columnNameMap.get(columnName)]; // TODO if column does not exist throw xceptn
}
}
第31行是:
return row[columnNameMap.get(columnName)]; // TODO if column does not exist throw xceptn
我不知道为什么它认为列不存在。我不完全了解数据库代码的工作原理。
答案 0 :(得分:1)
当其他东西试图使用它时,某些东西是null
。
Caused by: java.lang.NullPointerException
at org.orman.dbms.ResultList$ResultRow.getColumn(ResultList.java:31)
我会开始寻找那里 或者,如果那不是您拥有的包裹,那么:
at com.appsbydesign.soundfxfree.helpers.SQLiteHelper.getSounds(SQLiteHelper.java:23)
如果没有看到围绕这些位置的代码,任何人都可以做出疯狂的猜测。
我可以从堆栈跟踪中猜测出来的是,您可能会在不记录错误的情况下吞咽/捕获太多异常。如果你得到null
ResultSet或ResultRow,我希望你应该从早些时候的某个地方看到投诉。
你使自己变得非常困难。要精确确定哪个对象或哪种方法让你失望是非常困难的,因为你在每一行都有很多浓缩。
我最好的猜测是
Query query = ModelQuery.select().from(Sound.class)
.where(C.eq(Sound.Columns.CATEGORY, categoryId)).getQuery();
但是你现在应该做的就是回到你的代码并将它拆开,这样你每行只能执行一个动作。然后,如果/当它再次崩溃时你会更好地了解哪个位导致了这个困难。
使用新版本更新代码和堆栈跟踪,我们会看到我们的目标。