//function which is in my DatabaseHelper class which extends SQLiteOpenHelper
public String getCoordinatesLatitude(int id) {
String rowLat = "";
SQLiteDatabase db = this.getReadableDatabase();
String latQuery = "SELECT " + KEY_LATITUDE + "FROM " + TABLE_COORDINATES + "WHERE " + KEY_ID + "=" + id;
Cursor cursorr = db.rawQuery(latQuery,null);
if (cursorr != null){
cursorr.moveToPosition(id);
rowLat = cursorr.getString(cursorr.getColumnIndex(KEY_LATITUDE));
}
// return coordinates
return rowLat;
}
//function in my main activity
public void onListItemClick(ListView l, View v, int position, long id) {
selectedFromList = (String) (l.getItemAtPosition(position));
selectedItem = (int) l.getItemIdAtPosition(position);
String rowLat = helper.getCoordinatesLatitude(selectedItem);
Toast.makeText(getApplicationContext(), rowLat, Toast.LENGTH_SHORT).show();
}
我有listview
其中包含locations
。每个位置包含latitude
,longitude
和日期。我基本想要的是点击一个listview
项目,并根据其listview
ID从我的数据库中检索项目latitude
的值。我设置了getCoordinatesLatitude()
函数,但我不知道我的代码是否正确,因为当我点击一个listview
项目时,我得到强制关闭,logcat显示nullPointerException
。我怎样才能做这项工作?由于Android根据列表视图从数据库获取单行ID
什么我的列表视图看起来像
UPDATE !!!! 我设法摆脱NullPointerException异常的错误,并改变了我的代码,这
public String getLatitudeFromId(long id) {
String rowLat = "not found";
SQLiteDatabase db = this.getReadableDatabase();
//String latQuery = "SELECT " + KEY_LATITUDE + " FROM " + TABLE_COORDINATES + " WHERE " + KEY_ID + "=" + id;
//Cursor cursor = db.rawQuery(latQuery,null);
Cursor cursor = db.query(TABLE_COORDINATES, new String[] { "latitude" },"id="+id, null, null, null,null);
if (cursor.moveToFirst()){
cursor.moveToPosition((int) id);
rowLat = cursor.getString(cursor.getColumnIndex("latitude"));
}
cursor.close();
db.close();
// return coordinates
return rowLat;
}
和
public void onListItemClick(ListView l, View v, int position, long id) {
DatabaseHelper helper = new DatabaseHelper(this);
selectedFromList = (String) (l.getItemAtPosition(position));
selectedItem = l.getItemIdAtPosition(position);
String rowLat = helper.getLatitudeFromId(selectedItem);
Toast.makeText(getApplicationContext(), rowLat, Toast.LENGTH_SHORT).show();
}
但是现在,当我在ListView项单击,面包没有找到,所以它因为光标为空,所以在if(cursor.moveToFirst())语句中停止。当我的列表视图充满项目时,光标如何变为空白? :P
UPDATE2 我只通过改变我的查询该光标的光标= db.query(TABLE_COORDINATES,新的String [] {KEY_DATE},NULL,NULL,NULL,NULL,NULL)固定的问题;其中KEY_DATE是当你单击列表视图时想要显示的列名称
该查询返回数据库中的所有行。似乎只有在第一个列表项被选中或所有行相同时才有效,看起来是这样的 – ramaral
我知道,那很奇怪不是吗?我用不同的坐标测试它,它的功能就像一个魅力 – trololz0r
现在,因为cursor.moveToPosition,但删除一些行并添加其他人停止工作后。 – ramaral