2014-01-05 3 views
0

Я пытаюсь передать ArrayList<String[]> между двумя действиями, но не могу понять, как это сделать.Передача ArrayList <String[]> между действиями

Я пробовал putParcelable и набрасывал ArrayList<String[] на Parcelable, но это дало мне ошибку java.lang.ClassCastException: java.util.ArrayList cannot be cast to android.os.Parcelable.

Я также пробовал putStringArrayList, но это тоже не сработало.

Ваш вход оценен!

Основная деятельность

Intent i = new Intent(context, NewChecklistActivity.class); 
i.putExtra("checklists", checklistsArray); 

Secondary активность

checklistsArray = (ArrayList<String[]>) getIntent().getSerializableExtra("checklists"); 

StackTrace

01-04 18:49:09.140: E/AndroidRuntime(2246): FATAL EXCEPTION: main 
01-04 18:49:09.140: E/AndroidRuntime(2246): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.medusa.checkit/com.medusa.checkit.NewChecklistActivity}: java.lang.NullPointerException 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.os.Looper.loop(Looper.java:137) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at dalvik.system.NativeStart.main(Native Method) 
01-04 18:49:09.140: E/AndroidRuntime(2246): Caused by: java.lang.NullPointerException 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at com.medusa.checkit.NewChecklistActivity.onCreate(NewChecklistActivity.java:39) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.Activity.performCreate(Activity.java:4470) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
01-04 18:49:09.140: E/AndroidRuntime(2246):  ... 11 more 
+0

Вы можете определить, что «не работает»? –

+0

Вы пытались использовать только 'putExtra()' then' getSerializableExtra() 'для извлечения? –

+0

@JeroenVannevel Методы, которые я пытался выше, не принимали формат' ArrayList '. –

ответ

2

В осуществлении деятельности г данные, используйте Intent#putExtra():

ArrayList <String []> list = new ArrayList <String[]>(); 
list.add (new String [] {"a","b"}); 
Intent i = new Intent (this,YourTargetActivity.class); 
i.putExtra("list", list); 
startActivity(i); 

Тогда для извлечения, используйте Intent#getSerializableExtra() и бросание в ArrayList <String[]>:

ArrayList <String[]> list = (ArrayList<String[]>) getIntent().getSerializableExtra("list"); 

Вам нужно бросить, потому что компилятор не может сказать, что экземпляр Serializable действительно является ArrayList<String[]>. Вы получите предупреждение о непроверенных преобразованиях, что имеет смысл, поскольку это устраняет безопасность типа. Это нормально, потому что вы знаете, что вы прошли ArrayList<String[]>, поэтому извлечение его не вызовет каких-либо ClassCastExceptions.

Одно из предостережений заключается в том, что все элементы должны быть не пустыми. Например, если "a" был вместо null, когда Runtime воссоздает список, будет выброшен NullPointerException.

+0

Я только что добавил код в своем исходном сообщении. Я получаю «NullPointerException», не знаю почему. Я также добавил 'this.' перед' getIntent() ', но это не помогло. –

+0

@ TheNomad Где находится NPE? Убедитесь, что 'getIntent()' не возвращает 'null'. –

+0

это определенно связано с этим кодом, потому что я прокомментировал это, и все работает нормально. Я добавлю свой LogCat выше. –

1

попробовать это W здесь "я" является Намерение:

i.putStringArrayListExtra("nameYouWant", nameOfArray); 
+0

Он сказал, что попробовал это. –

+0

На самом деле я пробовал чтобы поместить его в пакет, но установка 'i.putStringArrayListExtra' тоже не работает.Говорит, что это не применимо для аргументов. –

+0

Интересно, есть ли проблема с вашим списком массивов? Какую версию Java вы используете? – heLL0

0

Вы можете использовать создать одноэлементный класс передать значение,

public class ShareData{ 
    private volatile static ShareData shareData; 
    public static ShareData data(){ 
    if(shareData == null){ 
     synchronized (ShareData.class) { 
      if (shareData == null) { 
       shareData = new ShareData(); 
      } 
     } 
    } 
    return shareData; 
    } 

    public ArrayList<String[]> arrayList; 
} 

установленное значение в деятельности 1

ShareData.data().arrayList = new ArrayList<String[]>(); 
ShareData.data().arrayList.add(strarray); 

получить значение в деятельности 2

public ArrayList<String[]> myArray = ShareData.data().arrayList; 
+0

Это действительно никогда не должно быть решением. Неужели должен быть встроенный способ сделать это? –

+0

Это хороший способ передать ценность в любом классе. Можете ли вы, например, почему это действительно никогда не должно быть решением? Спасибо – henry4343

+1

Singletons очень нечестны в тестировании, и этот подход потребует, чтобы вы в основном дублировали подпись данных, которые вы пытаетесь отправить. Разве это не точная причина, почему 'putStringArrayListExtra' существует в первую очередь? –

Смежные вопросы