2015-04-22 8 views
1

Теперь я пытался использовать намерение extra's для передачи и получения через список массивов строк, но по какой-то причине список никогда не проходит, когда я пытаюсь использовать get(0) для извлечения первой строки из списка. Я получаю ошибку с нулевым указателем, может кто-то Пожалуйста помоги мне с этим?Как передать строку Arraylist из одной активности в другую?

Первая активность (регистрация активность):

public static final String string_array = "geoquiz.android.bignerdranch.com.string_array"; 

final ArrayList<String> myStringArray = new ArrayList<>(); 
myStringArray.add(username.getText().toString()); 
myStringArray.add(firstName.getText().toString()); 
myStringArray.add(lastName.getText().toString()); 

Intent i = new Intent(signUpActivity.this,loginActivity.class); 
i.putExtra("string_array", myStringArray); 
startActivity(i); 

Вторая активность (Войти активность):

final Bundle stringArrayList = getIntent().getExtras(); 
final ArrayList<String> stringArray = new ArrayList<>(); 
stringArray = stringArrayList.getStringArrayList("string_array"); 

if(username.getText().toString().equals(stringArray.get(0))) 
Toast.makeText(loginActivity.this, "You have successfully logged in!", Toast.LENGTH_SHORT).show(); 
+2

Это не компилируется. 'stringArray' объявляется' final', поэтому вы не можете переназначить его на следующей строке. –

ответ

2

Вместо i.putExtra()i.putStringArrayListExtra().

Также добавьте запись в журнал, чтобы убедиться, что массив заполнен так, как вы ожидаете.

Log.i("myStringArray", myStringArray.toString()); 
Intent i = new Intent(signUpActivity.this,loginActivity.class); 
i.putStringArrayListExtra("string_array", myStringArray); //modified 
startActivity(i); 

Кроме того, вынимают final в этом коде:

final Bundle stringArrayList = getIntent().getExtras(); 
//final ArrayList<String> stringArray = new ArrayList<>(); //no need for this line 
ArrayList<String> stringArray = stringArrayList.getStringArrayList("string_array"); //just declare and assign 

См documentation here

+0

Эй, я сделал это изменение, но ошибка нулевого указателя все еще существует. – Athelon

+1

@WaqasKhan Взгляните на комментарий от @pbabcdefp, выведите 'final' при объявлении' myStringArray'. –

+1

Да, спасибо, arraylist правильно сохранил строки, удалив окончательное решение проблемы, спасибо снова. – Athelon

2

Я думаю, что вы получите неправильный в ArrayList от намерения во второй деятельности:

Intent intent = getIntent(); 

ArrayList<String> stringArray = intent.getStringArrayListExtra("string_array"); 
+0

Собственно, это в основном то же, что и текущий код. Он просто использует 'getStringArrayList' в' Bundle' вместо 'getStringArrayListExtra' на' Intent', который достигнет того же результата. –