0

データベースからのデータを表示するために、Android でリスト アダプターをクリックすると、範囲外の例外が発生します。

これは、ボタンをクリックしたときに実行されるコードです。

@Override
public void onCreate(Bundle contactsState) {
    super.onCreate(contactsState);

 // Set the layout for this activity
    setContentView(R.layout.contacts);
    final Intent openInfo = new Intent(this,contactInfo.class);


    final database info = new database(this);
    info.open();
    getData = info.getData();
    getData.moveToFirst();
    ListAdapter Cview = new SimpleCursorAdapter(this,
                        R.layout.row,
                        getData,
                        new String[]{info.KEY_CONTACT, info.KEY_PHONE},
                        new int[]{R.id.RowText});
    setListAdapter(Cview);

    ListView Vct;
    Vct = getListView();
    Vct.setClickable(true);
    Vct.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> a,View v,int position,long id){
            Click = (Cursor) a.getItemAtPosition(position);
            getId = Click.getLong(1);
            info.open();
            String Pdata = info.getRows(getId);
            openInfo.putExtra("data",Pdata);
            info.close();
            //Start the Activity
            startActivity(openInfo);


        }
    });

    info.close();

}

これは、このコードの一部を管理するデータベースの一部です。

    public Cursor getData() {
    // TODO Auto-generated method stub
    String[] columns = new String[]{ KEY_ROWID, KEY_CONTACT, KEY_PHONE, KEY_DAYS};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);

    return c;
}
public String getRows(long id) {
    // TODO Auto-generated method stub
    String[] columns = new String[]{KEY_ROWID,KEY_CONTACT,KEY_PHONE,KEY_DAYS};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
    String value = c.getString(1) + "\n" + c.getString(2) + "\n" + c.getString(3); 
    return value;
}

これは私が得ているエラーです:

http://paste.ubuntu.com/1000856/

これが行うことになっているのは、データベースからのデータが含まれているリストビューの名前をクリックすると、変数が渡された新しいアクティビティが開き、その変数はアクティビティの情報を表示することです。名前。

    Thanks in Advance
4

1 に答える 1

0

クリックしたリスト内の位置に関連するカーソルの行 ID が必要な場合はlong id、メソッドに渡されるパラメーターです。

実行しているカーソルの問題全体を次のようにスキップできます (不要なコードを取り除きます)。

   public void onItemClick(AdapterView<?> a,View v,int position,long id){
        info.open();
        String Pdata = info.getRows(id);
        openInfo.putExtra("data",Pdata);
        info.close();
        //Start the Activity
        startActivity(openInfo);
    }

編集

さらに情報を提供すると...問題はgetRowsメソッドにあります...moveToFirst()カーソルで何かを行う前に行う必要があります。

これを試して:

public String getRows(long id) {
     // TODO Auto-generated method stub
    String[] columns = new String[]{KEY_ROWID,KEY_CONTACT,KEY_PHONE,KEY_DAYS};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + id, null, null, null, null);
    c.moveToFirst();  // <---- add this
    String value = c.getString(1) + "\n" + c.getString(2) + "\n" + c.getString(3); 
    return value;
}

そして、私の最初の答えはこれでもうまくいくはずです。

編集2

インテント宣言が欠落しているようにも見えます... putExtra を使用していますが、openInfoインテントを作成するための呼び出しが表示されません。

于 2012-05-21T14:52:23.850 に答える