我最近在安卓市场上发布了一款游戏,今天通过 ACRA 收到了我的第一份错误报告。例外是:
java.lang.NullPointerException
at com.sweee.db.AndroidDBHelper.java.util.ArrayList getScores()(SourceFile:65)
at sweee.com.screens.HighScoreScreen.void show()(SourceFile:180)
at com.badlogic.gdx.Game.void setScreen(com.badlogic.gdx.Screen)(SourceFile:59)
at sweee.com.screens.LevelDoneScreen.void render$133aeb()(SourceFile:46)
at com.badlogic.gdx.Game.void render()(SourceFile:46)
at com.sweee.main.SweeeMain.void render()(SourceFile:125)
at com.badlogic.gdx.backends.android.AndroidGraphics.void
onDrawFrame(javax.microedition.khronos.opengles.GL10)(SourceFile:452)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
通过 ACRA,我知道该设备是运行 ICS 4.03 的 Acer Iconia A100。不幸的是,我无法在模拟器上重现错误(尝试连接到互联网和飞行模式)。它声称抛出 NPE 的行是对我的函数“isConnected()”的调用,它执行以下操作:
public boolean isConnected() {
final ConnectivityManager connectManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// Return true if connected, either in 3G or wi-fi
final boolean connected = (connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || connectManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED);
return connected;
}
我几乎一无所知,想修复这个错误。这种检查特定于 ICS 4.03 或 Iconia A100 的现有 Internet 连接的方法是否存在一般性问题?
也许拥有 Iconia A100 的人可以帮我一个忙并尝试重现失败?该游戏在此处的 android 市场上是免费的。非常感谢您的时间和任何可能的答案或提示。
编辑:
@Override
public ArrayList<Score> getScores() {
Cursor c = getWritableDatabase().query("scores", null, null, null, null, null, "points DESC");
if (c.moveToFirst()) {
do {
Score s = new Score(c.getString(1), c.getInt(2), getBoolFromInt(c.getInt(3)), getBoolFromInt(c.getInt(4)));
if (!scores.contains(s)) {
scores.add(s);
}
} while (c.moveToNext());
}
if (isConnected()) {
syncDB();
}
return scores;
}
这是导致 NPE 的函数。第 65 行将是
if(isConnected()) {
ArrayList 分数在类获取时被实例化(应用程序的第一次调用之一,之前没有调用,因此不应为空)。对 score.contains(s) 和 add 的调用都不应该导致 NPE,对吧?我只是不明白。特别是当这段代码在其他 9 台设备上运行良好时......
我真的很感激任何更多的帮助。谢谢!