我正在尝试开发一个 android 程序,让用户从列表菜单中选择一个项目......然后将此项目的 ID 传递给第二个类的意图,然后将 ID 存储在一个变量中并输入到一个 DBhelper 方法,用于获取一个人的姓名和年龄,并在 XML 中的相关 EditTexts 中显示此数据。
一切正常,直到我尝试开始第二个意图。我收到以下错误:
01-11 22:21:28.448: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sqliteexample/com.example.sqliteexample.DisplayContents}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
请注意,我已经初始化了以“0”传递的“id”变量。这不是被传递给类方法来获取名称和年龄吗?
希望有人可以推动我朝着正确的方向前进。
再次
这是我的代码。我的数据库助手类中的 2 种方法从数据库中获取名称和年龄:
public String showData(long id) {
String [] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
if(c != null)
{
// move to the selected row
c.moveToFirst();
String namePass = c.getString(1);
return namePass;
}
return null;
}
public String showAge(long id) {
String [] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
if(c != null)
{
// move to the selected row
c.moveToFirst();
String agePass = c.getString(2);
return agePass;
}
return null;
列表视图的类,传递 id 变量并启动意图:
public void onListItemClick(ListView list, View v, int list_posistion, long item_id)
{
long id = item_id;
Intent i = new Intent("com.example.sqliteexample.DisplayContents");
i.putExtra("passID", id);
startActivity(i);
}
从意图打开并在 onCreate 上显示名称和年龄的最后一个类:
package com.example.sqliteexample;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.content.Intent;
public class DisplayContents extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.displaycontents);
long id = 0;
EditText namePassed;
EditText agePassed;
namePassed = (EditText) findViewById(R.id.nameShow);
agePassed = (EditText) findViewById(R.id.ageShow);
HotOrNot display = new HotOrNot(this, null, null);
Bundle extras = getIntent().getExtras();
if (extras != null) {
id = extras.getLong("passedID");
}
display.open();
String returnedName = display.showData(id);
String returnedAge = display.showAge(id);
namePassed.setText(returnedName);
agePassed.setText(returnedAge);