2

アクティビティで、正しく動作するコードを書きました。

しかし、次のコードを使用して、このアクティビティにメソッドを追加しました。

    private void obtenerDatosReuniones(){

    try {

        int j=0;

        String aux = jsonReuniones.getString("nombres");

        String aux2 = null;

        aux2 = aux.replace("[", "");

        aux2= aux2.replace("]", "");

        String [] campos = aux2.split(",");

        while(j<campos.length){

            nombres_reuniones.add(campos[j]);

        }

nombres_reunones の型は ArrayList です

アプリケーションを実行すると、行 nombres_reuniones.add (campos [j]) に次のエラーが表示されます。

私は何を間違っていますか?

ありがとう!

4

3 に答える 3

3

あなたはループを進めていません:

while (j < campos.length) {
    nombres_reuniones.add(campos[j]);
    j++; // without this, you'll loop forever!
}

何が起こっているかというと、無限の量の「カンポ」を に追加していてArrayList、その過程でプログラムが利用できるすべてのメモリを使い果たしているということです。

覚えておいてください: ループの状態はfalse、ループが終了するある時点にある必要があります。ループを進めるのを忘れた場合 (この場合、j変数をインクリメントすることによって)、条件は常に でtrueあり、ループは決して終了しないため、無限ループが作成されます。

于 2012-10-17T21:56:10.070 に答える
3

あなたのループを見てください:

while(j<campos.length){
    nombres_reuniones.add(campos[j]);
}

これまでに終了することをどのように予想しますか? 変更しませんj。それを宣言し、最初にj値を割り当てた後に変更を加えないことを考えると、次のようにはるかに明確になります。0

for (int j = 0; j < campos.length; j++) {
    nombres_reuniones.add(campos[j]);
}

またはより良い:

for (String item : campos) {
    nombres_reuniones.add(item);
}

またはさらに簡単です:

nombres_reunions.addAll(Arrays.asList(campos));

さらに、以前のコードをより単純にすることができます。これを見てください:

String aux2 = null;
aux2 = aux.replace("[", "");
aux2= aux2.replace("]", "");

わざわざaux2初期値を割り当ててnull、すぐに上書きするのはなぜですか? さらに、メソッド呼び出しを簡単に連鎖させることができます。次のようにきれいになります。

String aux2 = aux.replace("[", "").replace("]", "");

実際、文字列操作全体を最初から最後まで連鎖させることができます。

String[] campos = jsonReuniones.getString("nombres")
                               .replace("[", "")
                               .replace("]", "")
                               .split(",");
nombres_reunions.addAll(Arrays.asList(campos));

(その式でさえインライン化するのではなく、そこでやめます...)

于 2012-10-17T21:56:21.237 に答える
0

の値を更新していないjためj、常に0 、常に以下の値になります。campos.length

于 2012-10-17T21:57:23.373 に答える