2012-10-17 1 views
5

ho bisogno di passare un array di Uri ad un'altra attività, per passare un array di String io uso semplicementeCome passare una matrice di Uri tra l'attività utilizzando Bundle

String[] images=getImagesPathString(); 

    Bundle b = new Bundle(); 
    b.putStringArray("images", images); 

Ma utilizzando una matrice di Uri

Uri[] imagesUri=getImagesUri(); 

questo non lo fa opere perché non c'è un metodo "putUri (Uri x)" in bundle

Come potrei risolvere questo problema?

risposta

4

Si dovrebbe guardare nell'interfaccia Parcelable per vedere come passare le cose in un intento

http://developer.android.com/intl/es/reference/android/os/Parcelable.html

Forse è possibile implementare una classe ParcelableUri che implementa tale interfaccia.

Ti piace questa (non testato !!):

public class ParcelableUri implements Parcelable { 

private Uri[] uris; 

public ParcelableUri(Parcel in) { 
    Uri.Builder builder = new Uri.Builder(); 

    int lenght = in.readInt(); 
    for(int i=0; i<=lenght; i++){   
     uris[i]= builder.path(in.readString()).build(); 
    } 
} 

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

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(uris.length); 
    for(int i=0; i<=uris.length; i++){ 
     dest.writeString(uris[i].toString()); 
    } 
} 

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

    public ParcelableUri createFromParcel(Parcel in) { 
     return new ParcelableUri(in); 
    } 

    public ParcelableUri[] newArray(int size) { 
     return new ParcelableUri[size]; 
    } 
}; 
+0

potresti darmi un campione? – AndreaF

+0

Google "che implementa Android parcelable". Devi provare per te stesso per primo, e tornare se non riesci a capirlo. – Phix

+0

L'array di Uri è nidificato in un altro oggetto. Non so come esattamente potrebbe farlo. – AndreaF

3

Non è il Parcelable Uri? Puoi provare a creare una matrice di elementi parcelable (Uri) e inserirla nel pacchetto.

6

Da quello che so, i matrici semplici non possono essere messi in bundle. Ma puoi inserire Uri-s in ArrayList e quindi chiamare Bundle.putParcelableArrayList().

esempio:

ArrayList<Uri> uris = new ArrayList<Uri>(); 
// fill uris 
bundle.putParcelableArrayList(KEY_URIS, uris); 

seguito:

ArrayList<Parcelable> uris = 
      bundle.getParcelableArrayList(KEY_URIS); 
    for (Parcelable p : uris) { 
     Uri uri = (Uri) p; 
    } 
+0

Grazie per la risposta. Dove dovrei inserire il secondo blocco di codice che hai postato? – AndreaF

+0

questo secondo blocco è per la lettura dal pacchetto, quindi dovrebbe essere ie. nella tua seconda attività onCreate() – marcinj

+0

Un grande aiuto grazie anche se ho usato: ArrayList uris = getIntent(). getParcelableArrayListExtra ("uriArray"); il mio codice è identico diverso da quello. – user1105748

0

È possibile utilizzare JSONObject per avvolgere qualsiasi oggetto e stringa i essa quickle. Tornando dalla stringa a JSON è davvero banale