Kindle Fire设备上的NullPointerException

时间:2014-06-22 16:24:07

标签: android nullpointerexception kindle-fire

我不断收到这些崩溃报告,但我无法弄清楚原因。这来自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

我不知道为什么它认为列不存在。我不完全了解数据库代码的工作原理。

1 个答案:

答案 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();

但是你现在应该做的就是回到你的代码并将它拆开,这样你每行只能执行一个动作。然后,如果/当它再次崩溃时你会更好地了解哪个位导致了这个困难。

使用新版本更新代码和堆栈跟踪,我们会看到我们的目标。