2011-12-28 15 views
5

Estoy tratando de pasar listas de arreglos entre actividades en Android. La lista contiene cadenas. He leído mucho sobre Parcelable. ¿Tendría que crear un Parcelable para pasar una lista de matriz String? A partir de ahora estoy usando putStringArrayListExtra() y getSringArrayListExtra() para pasar las listas a través de intentos.Al pasar ArrayLists en Android

Aquí hay algunos de mis códigos.

Intent load = new Intent(getApplicationContext(), HelloTabWidget.class); 
     load.putStringArrayListExtra("albums", albums); 
     load.putStringArrayListExtra("songs", songs); 
     load.putStringArrayListExtra("artists", artists); 
     load.putStringArrayListExtra("fileName", fileName); 

Este es mi método onCreate para la actividad que obtiene la lista de matrices.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.songlist); 

    Bundle extras = getIntent().getExtras(); 
    isArtists = extras.getBoolean("artists"); 
    isAlbums = extras.getBoolean("albums"); 
    isSongs = extras.getBoolean("songs"); 

     Intent get = getIntent(); 
     songs = get.getStringArrayListExtra("songs"); 
     artists = get.getStringArrayListExtra("artists"); 
     albums = get.getStringArrayListExtra("albums"); 
     fileName = get.getStringArrayListExtra("fileName"); 



    if(isArtists == true)  
     updateArtistsList(); 
    else if(isAlbums == true) 
     updateAlbumsList(); 
    else if(isSongs == true) 
     updateSongList();  
} 

La clase que recupera la lista se supone que crear una vista de lista a partir de los datos de las listas. Cada vez que ejecuto el código, obtengo nullPointerExceptions cuando intento hacer las listas. Sé que mi código listView funciona, así que reduje el problema a los intentos que pasan las listas de arreglos.

Gracias de antemano.

EDITAR: Aquí están las primeras líneas del logcat.

12-28 03:03:42.313: E/AndroidRuntime(873): FATAL EXCEPTION: main 
12-28 03:03:42.313: E/AndroidRuntime(873): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adam.mediaplayer/com.adam.mediaplayer.HelloTabWidget}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.adam.mediaplayer/com.adam.mediaplayer.MakeListActivity}: java.lang.NullPointerException 
+0

pegar algún registro de errores y el número de línea en la que tiene excepción – bindal

+0

¿Obtiene los nulos con las listas de arreglos o los booleanos o ambos? – MikeIsrael

+0

Creo que son las listas de arreglos. Los booleanos funcionan bien. –

Respuesta

4

Depende del tipo de arraylist

  • putIntegerArrayListExtra(String name, ArrayList<Integer> value)

  • putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

  • putStringArrayListExtra(String name, ArrayList<String> value)

  • putCharSequenceArrayListExtra(String name, ArrayList<CharSequence> value)

A continuación, se puede leer en la próxima actividad mediante la sustitución de put con get con cadena de clave como argumento, por ejemplo

myIntent.getStringArrayListExtra("arrayListName"); 
+0

Esto terminó funcionando. Gracias. –

+0

@Lalit Poptani +1 gran respuesta !!!!! – Venky

4

Aquí es cómo se puede pasar un ArrayList:

MyListClass.java - clase personalizada

public class MyListClass implements Parcelable{ 

private int test; 

public MyListClass() 
{} 

public MyListClass(Parcel read){ 
    test = read.readInt(); 
} 

public int getTest() { 
    return test; 
} 

public void setTest(int test) { 
    this.test = test; 
} 

public static final Parcelable.Creator<MyListClass> CREATOR = 
    new Parcelable.Creator<MyListClass>() { 

     @Override 
     public MyListClass createFromParcel(Parcel source) { 
      return new MyListClass(source); 
     } 

     @Override 
     public MyListClass[] newArray(int size) { 
      return new MyListClass[size]; 
     } 
    }; 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel arg0, int arg1) { 
    arg0.writeInt(test); 
} 

}

MyParcelable.java

public class MyParcelable implements Parcelable { 

private List<MyListClass> arrList = new ArrayList<MyListClass>(); 
private int myInt = 0; 
private String str = null; 

public String getStr() { 
    return str; 
} 

public void setStr(String str) { 
    this.str = str; 
} 

public List<MyListClass> getArrList() { 
    return arrList; 
} 

public void setArrList(List<MyListClass> arrList) { 
    this.arrList = arrList; 
} 

public int getMyInt() { 
    return myInt; 
} 

public void setMyInt(int myInt) { 
    this.myInt = myInt; 
} 

MyParcelable() { 
    // initialization 
    arrList = new ArrayList<MyListClass>(); 
} 

public MyParcelable(Parcel in) { 
    myInt = in.readInt(); 
    str = in.readString(); 
    in.readTypedList(arrList, MyListClass.CREATOR); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel outParcel, int flags) { 
    outParcel.writeInt(myInt); 
    outParcel.writeString(str); 
    outParcel.writeTypedList(arrList); 
} 

public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { 

    @Override 
    public MyParcelable createFromParcel(Parcel in) { 
     return new MyParcelable(in); 
    } 

    @Override 
    public MyParcelable[] newArray(int size) { 
     return new MyParcelable[size]; 
    } 
}; 

}

MainAcitivty.java

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    arrList.add(new MyListClass()); 
    arrList.get(0).setTest(200); 

    MyParcelable object = new MyParcelable(); 
    object.setMyInt(100); 
    object.setArrList(arrList); 

    Intent intent = new Intent(MainActivity.this,ReceiverParcel.class); 
    intent.putExtra("parcel", object); 
    startActivity(intent); 
} 

ReceiverParcel.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle b = getIntent().getExtras(); 
    MyParcelable object = b.getParcelable("parcel"); 

    System.out.println(object.getArrList().get(0).getTest()); 
    System.out.println(object.getMyInt()); 

}

+0

¿Entonces necesita usar parcables? Voy a intentar esto ahora. –

+0

@AdamJakiela Forma de pasar ArrayList entre Actividades ... – Venky

+0

+1 por una buena respuesta: P –

Cuestiones relacionadas