3

配列リストを含む配列リストをプログラムで機能させようとして問題が発生した場合、次のような奇妙な警告が表示されます: @SuppressWarnings "null" を processArray() に追加します。これを追加するかどうかに関係なく、プログラムがクラッシュします。私はここで間違っているのですか?どんな助けでも大いに役立ちます。

      private ArrayList<ArrayList<String>> processArray(ResponseList<Status> responses){

      ArrayList<ArrayList<String>> mainArray = null;
      ArrayList<String> innerArrays = null;

      for (Status response: responses ){
          String name, status, imgUrl, time;

          name = response.getUser().getName();
          status = response.getText();
          imgUrl = response.getUser().getProfileImageURL().toString();
          time = response.getCreatedAt().toString();

          ArrayList<String> rtLinks = checkLinks(response.getText());

          if(rtLinks != null){

              for (String tLink: rtLinks){

                  innerArrays.add(name);
                  innerArrays.add(status);
                  innerArrays.add(imgUrl);
                  innerArrays.add(time);
                  innerArrays.add(tLink);

                  mainArray.add(innerArrays);

              }

          }


      }
    return mainArray;
4

3 に答える 3

5

これらの配列リストのいずれかを実際に初期化することはありません。

あなたがしたい

ArrayList<ArrayList<String>> mainArray = new ArrayList<ArrayList<String>>(); // or new ArrayList<>() in java 7

内側の for ループ内:

ArrayList<String> innerArrays = new ArrayList<String>(); // or new ArrayList<>() in java 7

また、「コードを機能させるためだけに」警告を抑制しないでください。それらが表示される理由と、それらを無視することを選択した理由が正確にわかっている場合にのみ、それらを抑制してください。

于 2012-05-18T22:19:54.053 に答える
2

あなたのプログラムはおそらくNullPointerException. これは、値が である変数にアクセスしようとすると発生します( null ポインターの逆参照とnull呼ばれます)。2 つの のいずれかにアクセスする前に、初期化する必要があります。2 行を次のように変更してみてください。ArrayList

  ArrayList<ArrayList<String>> mainArray = new ArrayList<ArrayList<String>>();
  ArrayList<String> innerArrays = new ArrayList<String>();

これで当面の問題は解決するはずです。

innerArraysただし、リストを使用している理由がまったくわかりません。最後のビットを次のようにリファクタリングします。

for (String tLink: rtLinks){
    ArrayList<String> tempList = new ArrayList<String>();
    tempList.add(name);
    tempList.add(status);
    tempList.add(imgUrl);
    tempList.add(time);
    tempList.add(tLink);
    mainArray.add(tempList);
}

変数を削除しinnerArraysます。このように、スコープはより限定され、コードはより論理的に動作します。

于 2012-05-18T22:26:17.770 に答える
1

innerArrays 変数をメインの ArrayList に追加しようとしていますが、メソッドの先頭でメインの ArrayList null を宣言しています。メインの ArrayList を文字列の ArrayLists の新しい ArrayList として初期化すると、コードが機能するはずです。

于 2012-05-18T22:23:52.583 に答える