我正在开发我的第一个Android应用程序,并设置了SQLite数据库并使用它,我已经能够成功使用游标来检索一些数据并使用SimpleCursorAdapter使数据显示为列表。
我现在正在寻找检索特定字段并将结果放入浮点变量。然而,我在网上找到的所有示例似乎都希望您处理具有多行/列的大型检索,并且它们都已经被调整为列表或数组。 我无法弄清楚如何将该字段的内容转换为变量。
我尝试使用myVariable = cursor.getFloat(0)
,我认为这是正确的行,但我也无法做到这一点。
每次运行我的应用程序时我都会遇到null pointer exception
错误,我尝试了一些try catch
块,但我对这一切都是新手并没有在故障排除方面取得任何成功。它可能是一个简单的查询拼写错误..
我将在下面提供一些代码,但欢迎任何一般或具体的建议,感谢您抽出时间来查看。
public void Main(){
//gets the rowId we put with the intent from Budget.java, sets a default value of -1 'incase.
selectedRowId = getIntent().getLongExtra("rowId", -1);
Cursor costCursor= FindBudgetForId(selectedRowId);
MyText(costCursor, selectedRowId);
}
public Cursor FindBudgetForId(long selectedRowId){
SQLiteDatabase db = budgetData.getWritableDatabase();
String rowBudgetQuery = "SELECT BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE _ID="+ selectedRowId;
Cursor c = db.rawQuery(rowBudgetQuery,null);
startManagingCursor(c);
return c;
}
public void MyText(Cursor costCursor, long selectedRowId){
TextView whatDoText=(TextView)this.findViewById(R.id.keypad_text);
whatDoText.setText("row: " +(String.valueOf(selectedRowId)));
//set the current budget amount in the edit text box
retrievedAmount = costCursor.getFloat(3);
EditText inputHint=(EditText)this.findViewById(R.id.cost_input);
inputHint.setText((String.valueOf(retrievedAmount)));
}
答案 0 :(得分:4)
我相信当SqliteDatabase#rawQuery
返回一个Cursor时,它最初位于之前第一个结果。因此,为了从您获得的结果中实际读取值(不获取NullPointerExceptionExplosionDeath),请在获取浮点数之前调用cursor.moveToFirst()
。我以前一直被它咬了。
答案 1 :(得分:1)
您可以获得
等数据 Cursor c =//Query;
int numRows = c.getCount();
if (numRows > 0)
{
c.moveToFirst();
While(numRows>0) // or for loop
{
String strName = c.getString(0);
Int i = c.getInt(1);
numRows--;
}
}