2017-04-18 4 views
-1

2つのアクティビティ間で文字列のarrayListを送信しようとしています。 arrayListは両方のアクティビティで明示的に初期化され、getIntentから引き出されたarrayListと等しくなるように設定されます。ArrayListがインテントnullポインタを渡しました

ArrayList elements = new ArrayList<String>(); // initialize elements 

要素初期化され、それははaddElement要素に続いてはaddElement

addElementButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    Intent toAddElement = new Intent(NewRemote.this, addElement.class); 
    toAddElement.putStringArrayListExtra("element_list", elements); 
    startActivity(toAddElement); 
    } 
}); 

に送られ、初期化され、その後、ArrayListに等しく設定される:ここ

は、最初のアクティビティ関連するコードがあります意図から引き抜いた

ArrayList elements = new ArrayList<String>(); 
Intent getElements = getIntent(); 
elements = getElements.getStringArrayListExtra("element_list"); 

私はNULLポインタを取得していますelements.add()私は少し遅れ

 addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      elements.add(selectedElement); 
      Intent toNewRemote = new Intent(addElement.this, NewRemote.class); 
      toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote 
      startActivity(toNewRemote); 
     } 
    }); 

私は要素が明確に初期化されるときに、私はNULLポインタを取得することができますどのようにように混乱していますが、任意のヘルプは高く評価され、それを呼び出すとき。

私はこの問題を2日間解決するための解決策を探していましたが、同様のスレッドは見つかりませんでした。

ありがとうございます!

+1

は、あなたが 'elements'あなたが'上の第二に、 'Activity'がある)(追加'呼んでいることが確実なのに役立ちますあなたは初期化していますか?つまり、決して初期化されていないフィールドとして2番目の 'elements'を宣言していないのでしょうか? –

+0

ログの完全な猫のエラーを投稿できますか? – wnieves19

+0

あなたのAndroid Studio(実際には単なるIDE)で適切なJava言語を使用してAndroid Appを開発してみてください。 – statosdotcom

答えて

1

コードには奇妙なことがあります。

ArrayList elements = new ArrayList<String>(); 
Intent getElements = getIntent(); 
elements = getElements.getStringArrayListExtra("element_list"); 
.... 
addButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     elements.add(selectedElement); 
     Intent toNewRemote = new Intent(addElement.this, NewRemote.class); 
     toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote 
     startActivity(toNewRemote); 
    } 
}); 

ここではelementsを内部関数で使用しました。あなたはそれを最終的なものとして定義していませんでした! onClick関数内のelementsは、初期化していない別の配列を参照していると思います。あなたは

ArrayList elements = new ArrayList<String>(); 

をやって、それはあなたが

elements = getElements.getStringArrayListExtra("element_list"); 

として意思を経由して受信され、そのリストによって参照されますので、あなたの

+0

にstacktraceと[mcve]がありません。この場合、nullポインタ例外がスローされません。 –

+0

これはNullPointerExceptionが発生する理由です。彼は初期化されないクラスの要素配列を持っています。 @AbdulWaheed –

+0

あなたは最終修飾語を削除してみましたが、例外はありますか?私はそれが例外をスローするのではなく、コンパイル時エラーを与えることを観察した。 –

0

まず、コードの下に試してみてください、あなたのArrayListを初期化する必要がないことも働いているとテストされています。

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 

    Intent getElements = getIntent(); 
    final ArrayList elements = getElements.getStringArrayListExtra("element_list"); 

    findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      elements.add("selected element"); 
      Intent toNewRemote = new Intent(addElement.this, NewRemote.class); 
      toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote 
      startActivity(toNewRemote); 
     } 
    }); 

} 
+0

私はこれを試してみましたが、そのような運がない/私は本当になぜこれが起きているのか分かりませんでした。 – user3532835

+0

まだヌルポインタを得ています/ –

0

代わりのglobalとしてfinal宣言elementsを使用。

これを試してみてください:

ArrayList elements; 
....... 
................. 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    elements = new ArrayList<String>(); 

    Intent getElements = getIntent(); 
    elements = getElements.getStringArrayListExtra("element_list"); 

    ........ 
    ................. 

    addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      elements.add(selectedElement); 
      Intent toNewRemote = new Intent(addElement.this, NewRemote.class); 
      toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote 
      startActivity(toNewRemote); 
     } 
    }); 
} 

希望これは〜

+0

私はこれを試してみました。この問題がどこから来ているのか本当に分かりません! – user3532835

関連する問題