0

Android では、SQLOrder BY RANDOM() LIMIT 2が 2 つのランダムな文字列を出力することはわかっていますが、両方の文字列を同じ TextView に入れます。2 つのランダムな文字列を取得し、それらを 2 つの別個の TextView に配置したいと思います。このコードは、2 つのランダムな文字列を取得し、それらを同じテキストビューに出力します。

    //--- DBAdapter method
public String getRandomHP1() {
    Cursor cursor = this.db.query(
            "hdtable Order BY RANDOM() LIMIT 2",
            new String[] { KEY_HP }, null, null, null, null, null);
    String result = "";

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        result = result + cursor.getString(0);
    }
    return result;
}

//--- Main Activity
String r1 = dba.getRandomHP1();
dba.close();
optionB_TV.setText(r1);

そこで、以下のコードを試して、2 つのランダムな文字列を 2 つの文字列配列に分離しようとしましたが、アプリがクラッシュしました。誰かが私が間違っていることを教えてもらえますか? ありがとう!

    //--- DBAdapter method
public String[] getRandomHP2() {
    Cursor cursor = this.db.query(
            "hdtable Order BY RANDOM() LIMIT 2",
            new String[] { KEY_HP }, null, null, null, null, null);

    if (cursor != null) {
        for (cursor.moveToFirst(); !cursor.isAfterLast();){
            String colStrings[] = new String[2];
            colStrings[0] = cursor.getString(0);
            colStrings[1] = cursor.getString(1);
            return colStrings;
        }
    }
    return null;
}

//---Main Activity
String[] r2 = dba.getRandomHP2();
dba.close();
optionB_TV.setText(r2[0]);
optionC_TV.setText(r2[1]);
4

1 に答える 1

0

コードの使用

    for (cursor.moveToFirst(); !cursor.isAfterLast();){
       String colStrings[] = new String[2];
        colStrings[0] = cursor.getString(0);
        colStrings[1] = cursor.getString(1);
        return colStrings;
    }

cursor.getString(1)カーソルの最初の値に常に移動しています.2番目の値を取得することはありません.さらに、クラッシュが発生している可能性がある場所を使用して、存在しない列を取得しようとしています

代わりにこれを試してください

    int i = 0;
    String colStrings[] = new String[cursor.getCount()];
    while (cursor.moveToNext())
    {
     colStrings[i] = cursor.getString(0);
     i++;
    }

    return colStrings;

また、使い終わったらカーソルを閉じることを忘れないでください..

cursor.close();そうするために電話するだけです

于 2012-11-13T16:10:09.400 に答える