0

データベース内の人の名前を取得しようとしています。現在、範囲外エラーが発生しています。

データベース内のすべてのデータを表示するリストビューがあるため、取得しようとしているデータが存在することを知っています。

ELSEチェックの場合:

 NameAppointPass.open();
    String nameReturned = NameAppointPass.getName(sentID);
    if(nameReturned != "")
    {
        Dialog d = new Dialog(this);
        d.setTitle("returned");
        TextView txt = new TextView(this);
        txt.setText("win");
        d.setContentView(txt);
        d.show();
    }
    else
    {
        Dialog d = new Dialog(this);
        d.setTitle("empty");
        TextView txt = new TextView(this);
        txt.setText("Fail");
        d.setContentView(txt);
        d.show();
    }

うまくいけば、誰かが私がどこで間違っているのかを見ることができます。

現在、次のエラーが発生しています。

01-21 21:41:43.753: E/AndroidRuntime(276): FATAL EXCEPTION: main
01-21 21:41:43.753: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.addAppointment}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

次のように、onclick'long variable'を使用して、リストビューから必要なデータのIDを送信しています。

public void onListItemClick(ListView list, View v, int list_posistion, long item_id)
{

    long idToPass = item_id;

    Intent setName = new Intent("com.example.flybase2.addAppointment");
    setName.putExtra("newPassedID", idToPass);
    startActivity(setName);  
}

次に、これはバンドルを介して、次のようにオブジェクトインスタンス'NameAppointPass'に送信されます。

NameAppointPass.open();
String nameReturned = NameAppointPass.getName(sentID);

次のコードはgetName、データベースをクエリし、選択したIDに格納されている名前を返す必要があるメソッドを示していますが、代わりにエラーが発生します。

public String getName(long passedID) {

        String [] columns = new String[]{KEY_ROWAPPID, KEY_NAMEAPP,   KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP};
        Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, KEY_ROWAPPID + "=" + passedID, null, null, null, null);
        if(c != null)
        {
        c.moveToFirst();
        String name = c.getString(1);
        return name;
        }

        return null;
    }
4

2 に答える 2

2

カーソルが空になる可能性がある場合は、カーソルにデータがないかどうかを確認できます。

        if(c != null && c.getCount() > 0)

カーソルが空である理由をさらに診断するには、さまざまな場所にログステートメントを配置して、アイテムIDがまだ正しいかどうかを確認します。

于 2013-01-21T22:05:09.943 に答える
0

これをソートすることができました。結局、渡されたIDを保持するために変数の名前を間違って付けてしまいました。

于 2013-01-22T00:37:31.583 に答える