【发布时间】:2014-08-05 00:41:19
【问题描述】:
我不断收到这些崩溃报告,但我不知道为什么。这来自 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 行是这一行:return 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
我不知道为什么它认为列不存在。我不完全理解数据库代码是如何工作的。
【问题讨论】:
-
如果与导致此 NullPointerException 的代码无关,为什么会发生这种情况。仅发布日志不会对您有所帮助。也请发布相关代码。
-
我已经发布了错误的相关代码。
-
“我无权访问 org.orman.dbms”——这是您正在使用的某个库。您可能需要联系该库的作者以确定您在其中崩溃的原因。
-
您已经有一段时间没有编辑您的问题了,而且距离我发布答案的时间更长。您能否向我们展示将数据库字段映射到类成员的代码?我会刺伤并说那里有错字或其他东西。如果库无法将结果映射到数据类型,那么我认为问题就在那里。
-
但是您可能已经继续前进,要么解决了问题,要么找到了解决问题的其他方法。如果是这种情况,我会敦促你用你实施的任何解决方案来回答你自己的问题。里面有你想象中的互联网积分和徽章!
标签: android nullpointerexception kindle-fire