光标到字符串

时间:2015-02-26 18:32:41

标签: android sqlite cursor

我是android的新手,我不知道为什么我得到CursorIndexOutOfBoundsException:请求索引0的大小为0.我试图使用listview在另一个类上显示它。这是我的代码:

public void onItemClick(AdapterView<?> arg0, View view, int position,
        long id) {
    // TODO Auto-generated method stub

    position = position + 1;

    Cursor a = MainActivity.sqldb
            .rawQuery("Select name from " + MainActivity.tblpb
                    + " where _pid = " + position + ";", null);

    String aa = a.getString(a.getColumnIndex("name"));


    Cursor b = MainActivity.sqldb
            .rawQuery("Select phone from " + MainActivity.tblpb
                    + " where _pid = " + position + ";", null);

    String bb = b.getString(b.getColumnIndex("phone"));

    Intent next = new Intent (this, ThirdActivity.class);
    startActivity(next);

}

我知道这里有一些问题。我不知道它是什么。

创建表:

sqldb = this.openOrCreateDatabase(dbpb, MODE_PRIVATE, null);
    sqldb.execSQL("CREATE TABLE IF NOT EXISTS "
            + tblpb
            + " (_pid INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, phone INTEGER);");

插入表格:

sqldb.execSQL("Insert into " + tblpb
                        + " (name, phone) Values ('" + x + "' , '"
                        + y + "' );");

2 个答案:

答案 0 :(得分:1)

尝试这样做:

public void onItemClick(AdapterView<?> arg0, View view, int position,
    long id) {
    // TODO Auto-generated method stub
    String aa = null;
    String bb = null;

    // do not alter the position, DB starts the same position as ItemClick for
    // adapter view
    // position = position + 1;

    Cursor a = MainActivity.sqldb
        .rawQuery("Select name from " + MainActivity.tblpb
                + " where _pid = " + position + ";", null);

    if(a != null){
         // Force cursor to position 0
         if(a.moveToFirst()){
              // make sure the column actually exists
              aa = a.getString(a.getColumnIndexOrThrow("name"));
              Log.d("Cursor A - Name", "name column val: "+ aa);
         }else{
              Log.d("Cursor A", "cursor A failed to move to first");
         }
    }else{
         Log.d("Cursor A null", "cannot access cursor A");
    }

    Cursor b = MainActivity.sqldb.rawQuery("Select phone from " + MainActivity.tblpb + " where _pid = " + position + ";", null);

   if(b != null){
         // Force cursor to position 0
         if(b.moveToFirst()){
              // make sure the column actually exists
              bb = b.getString(b.getColumnIndexOrThrow("phone"));
              Log.d("Cursor B - Phone", "phone column val: "+ bb);
         }else{
              Log.d("Cursor B", "cursor B failed to move to first");
         }
    }else{
         Log.d("Cursor B null", "cannot access cursor B");
    }

    Intent next = new Intent (this, ThirdActivity.class);
    next.putExtra("NAME", aa);
    next.putExtra("PHONE", bb);
    startActivity(next);

}

然后在你的第二个活动中:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_file);

  Bundle extras = getIntent().getExtras();
   if(extras != null){
      String aa = extras.getString("NAME");
      String bb = extras.getString("PHONE");

      // Since you cannot tell if these are null check them
      if(aa != null){
        // ... Use on your TextView

      }
      // Since you cannot tell if these are null check them
      if(bb != null){
       // ... Use on your TextView

      }
   }
}

答案 1 :(得分:0)

该错误表示您正在尝试访问空列表(大小为0)的第一个元素(索引0),这意味着您的查询未返回任何结果。确保您的查询正确无误。

修改

在对查询中的数据执行任何操作之前,调用cursor.moveToFirst()并检查其结果也是一个好主意。

http://developer.android.com/reference/android/database/Cursor.html#moveToFirst%28%29