gpt4 book ai didi

android - 第一行或最后一行出现 Sqlite NullPointerException

转载 作者:行者123 更新时间:2023-11-30 03:41:31 27 4
gpt4 key购买 nike

我通过空指针和查询帖子上下搜索,但仍然无法解决这个问题。我正在使用自定义适配器扩充 ListView,然后使用 ItemLongClickListener 注册它,这会引发上下文菜单。上下文菜单中填充了从数据库中检索到的数据,这些数据使 ListView 膨胀......行数相同,显然......但是当我查询第一个项目(为 int id 传入的位置“0”)时,我得到一个异常(exception)。但是如果我在它传入后将它递增 1,我会在最后一行得到相同的异常。所有其他行显示查询的数据都很好。我可以包含更完整的代码,但我想我在这里遗漏了一些更基本的东西……有什么想法吗?提前致谢,我的第一个问题——如果我的发帖需要以不同的方式进行,也请告诉我!

listview.setAdapter(new MyCustomAdapter(text, image));
listview.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View strings,
int position, long id) {
// showToastMessage("" + position);
showDialogOnLongClick(position);
return true;
}
});

调用数据库函数的对话框生成器:

private void showDialogOnLongClick(int position) {
Builder alert = new AlertDialog.Builder(this);
// AlertDialog alert = new AlertDialog.Builder(this).create();
ArrayList mSelectedItems = new ArrayList();

ArrayList<String> listInfo = getListInfo(position);

...

}

以及,数据库的实际查询:

    // Getting single list item data
public ArrayList<String> getListInfo(int id) {
DatabaseHelper helper = new DatabaseHelper(this);
database = helper.getReadableDatabase();
//to increment, or not to increment?
id++;
// Cursor cursor =
// database.rawQuery("SELECT * FROM list_data WHERE _id ='"+ id +"'",
// null);
Cursor cursor = database.query("list_data", new String[] { "listTitle",
"listContent", "dateCreated", "dateModified" }, "_id = " + id
+ "", null, null, null, null);

if (cursor != null && (cursor.getCount() > 0))
cursor.moveToFirst();

ArrayList<String> result = new ArrayList<String>();
result.add(cursor.getString(cursor.getColumnIndex("listTitle")));
result.add(cursor.getString(cursor.getColumnIndex("listContent")));
result.add(cursor.getString(cursor.getColumnIndex("dateCreated")));
result.add(cursor.getString(cursor.getColumnIndex("dateModified")));

return result;
}

日志猫:

03-25 15:13:20.113: E/AndroidRuntime(12639): FATAL EXCEPTION: main
03-25 15:13:20.113: E/AndroidRuntime(12639): java.lang.NullPointerException
03-25 15:13:20.113: E/AndroidRuntime(12639): at com.baked.listanywhere.ActivityMain.showDialogOnLongClick(ActivityMain.java:310)

感谢您的关注!

最佳答案

but when I query the first item (position '0' passed in for the int id), I get an exception.

尝试查找 ID 为 0 的行很可能会返回一个空 Cursor,SQLite INTEGER PRIMARY KEY 应该始终大于零。与其传递 position,不如尝试传递 id,如果您的自定义适配器是 CursorAdapter,则 onItemClick 中的 id 参数是当前行的 id。


这段代码会在 Cursor 为空时抛出异常,因为你无法从不存在的行中读取数据:

if (cursor != null && (cursor.getCount() > 0))
cursor.moveToFirst();

...
result.add(cursor.getString(cursor.getColumnIndex("listTitle"))); // Exception!

更好的方法是检查 moveToFirst() 的结果:

if(cursor != null && cursor.moveToFirst()) {
...
result.add(cursor.getString(cursor.getColumnIndex("listTitle")));
}

至于:

java.lang.NullPointerException
at com.baked.listanywhere.ActivityMain.showDialogOnLongClick(ActivityMain.java:310)

MainActivity 中的第 310 行是什么?

关于android - 第一行或最后一行出现 Sqlite NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15626000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com