【发布时间】:2012-12-17 09:46:43
【问题描述】:
我正在构建一个应用程序,它在 WebView 中显示一些缓存在 SQLite db 中的远程数据。 JavaScript 函数正在通过 JavaScript 接口从 WebView 请求数据。
当用户在页面上输入一个输入元素时,JavaScript 函数通过调用 Java 函数请求搜索结果,进而触发一个 sql 查询。然后将结果打包成合适的 JSON 格式并返回。
除非您输入非常快,否则获取数据工作正常。如果您在按几下键后输入速度足够快,则应用会退出不抛出任何异常,它只会返回主屏幕。
我已设法缩小原因 - 注释掉对 .query 方法的调用可防止崩溃,但会使应用程序无用。
有没有办法检查导致应用程序退出的原因,是否有其他日志或工具可以提供帮助?
Java函数代码:
public Lot[] getLotList(String query, int limitCount) {
...
...
String[] resultColumns = new String[] { LotsSearch._ID };
String queryWhere = LotsSearch.TABLE_NAME + " MATCH ?";
String[] queryArgs = new String[] { query + "*" };
String sortOrder = LotsSearch.COLUMN_NAME_NUMBER + " ASC, " + LotsSearch.COLUMN_NAME_TITLE + " ASC";
String limit = null;
Cursor cursor = null;
if (limitCount != -1)
limit = "0," + limitCount;
try {
cursor = mDb.query(LotsSearch.TABLE_NAME, resultColumns, queryWhere, queryArgs, null, null, sortOrder, limit);
if (cursor != null && cursor.moveToFirst()) {
result = new Lot[cursor.getCount()];
try {
int idColumnIndex = cursor.getColumnIndexOrThrow(LotsSearch._ID);
int lotId;
Lot lot;
do {
lotId = cursor.getInt(idColumnIndex);
lot = mLots.get(lotId);
if (lot != null)
result[index++] = lot;
} while (cursor.moveToNext());
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
if (cursor != null)
cursor.close();
}
...
...
return result;
}
更新:
我发现有另一个日志可以通过发出来访问
logcat -b events
当应用崩溃时只有一个条目
I/am_proc_died( 59): [11473,com.example.app]
当应用程序正常退出时,此日志会显示一组条目:
I/am_finish_activity( 59): [1157978656,22,com.example.app/.MainActivity,app-request]
I/am_pause_activity( 59): [1157978656,com.example.app/.MainActivity]
I/am_on_paused_called(11473): com.example.app.MainActivity
I/am_destroy_activity( 59): [1157978656,22,com.example.app/.MainActivity]
【问题讨论】:
-
没什么可发的,logcat 完全是空的(崩溃时没有添加一个条目),所以才问有没有其他的调试建议。
-
您是否尝试过通过应用断点进行调试,只是问,愚蠢的问题
-
是的,但是当应用程序死掉时,Eclipse 什么也抓不到(因为没有抛出异常)
-
我会建议逐行调试,看看它在哪一行之后退出,会给你一个提示
标签: java javascript android sqlite android-webview