-2

エラーが発生しました。解決を手伝っていただければ幸いです。

メソッド getdata(); から「:」で区切られた文字列を返しています。エミュレーターではすべて正常に動作しますが、デバイスでアプリを実行すると、メソッドが空の文字列を返し、エラーが発生します: IndexOutOfBoundsException: length=1; index=2.`

コード:

    Databaseengine info = new Databaseengine(this);
    info.open();
    String data = info.getdata();
    info.close();
    String[] values = null;

    values = data.split(":");

    tvans1.setText(values[4]);
    tvans2.setText(values[5]);
    tvans3.setText(values[6]);
    tvans4.setText(values[7]); 

メソッドは次のようになります。

public String getdata() {
    // TODO Auto-generated method stub
    String[] columns = new String [] { KEY_ROWID, KEY_CATEGORY, KEY_QUESTION, KEY_ANSWER, KEY_ALTONE, KEY_ALTTWO, KEY_ALTTHREE, KEY_ALTFOUR };

    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null , null , null, "RANDOM() LIMIT 1");
    String result = "";
    //The cursor will be looking for these columns:
    int iRow = c.getColumnIndex(KEY_ROWID);
    int iCat = c.getColumnIndex(KEY_CATEGORY);
    int iQuiz = c.getColumnIndex(KEY_QUESTION);
    int iAns = c.getColumnIndex(KEY_ANSWER);
    int iAlt01 = c.getColumnIndex(KEY_ALTONE);
    int iAlt02 = c.getColumnIndex(KEY_ALTTWO);
    int iAlt03 = c.getColumnIndex(KEY_ALTTHREE);
    int iAlt04 = c.getColumnIndex(KEY_ALTFOUR);


    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(iRow) + ":"
        + c.getString(iCat) + ":" + c.getString(iQuiz) + ":" 
        + c.getString(iAns) + ":" + c.getString(iAlt01) + ":" 
        + c.getString(iAlt02) + ":" + c.getString(iAlt03) + ":"
        + c.getString(iAlt04) + "\n";

    }
    c.close();
    return result;
}

ここで精神的になる前に、私を助けてください:-)

4

2 に答える 2

0

分割後の結果の配列の長さを考慮する必要があります。

インデックス番号を求めるには。7、長さは少なくとも8要素である必要があります。

if (values.length > 7) { ..do your work.. } else { ..throw exception.. }

エミュレーター/デバイスで発生するさまざまな動作は、解析される個別のデータに関連している必要があります。

于 2013-02-05T13:18:13.163 に答える
0

よくわかりませんが、これを試してみてください

 values = data.split("\\:");

それ以外の

 values = data.split(":");
于 2013-02-05T13:18:45.053 に答える