2012-10-17 61 views
5

我需要开放的数组传递到另一个活动, 传递字符串数组我用简单的如何使用捆绑

String[] images=getImagesPathString(); 

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

但使用乌里

阵列活动之间传递乌里数组
Uri[] imagesUri=getImagesUri(); 

这不工作,因为没有一种方法“putUri(URI X)”捆绑

我怎么能解决这个问题?

回答

4

你应该看看Parcelable接口,以了解如何通过在意向

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

东西也许你可以实现实现该接口ParcelableUri类。

这样的(未测试!!):

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

你能给我一个样本吗? – AndreaF

+0

谷歌“实施parcelable android”。要先尝试自己,如果你不能得到它,就回来。 – Phix

+0

Uri数组嵌套在另一个对象中。我不知道如何做到这一点。 – AndreaF

3

是不开放的parcelable?您可以尝试创建一个parcelable元素(Uri)的数组并将其放入Bundle中。

6

从我所知道的普通数组不能放入Bundles中。但是你可以把Uri-s放到ArrayList中,然后调用Bundle.putParcelableArrayList()。

例如:

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

以后:

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

感谢你的回答。我应该在哪里放置你发布的第二个代码块? – AndreaF

+0

这个第二块是用于从包中读取的,所以它应该是ie。在你的第二个活动onCreate() – marcinj

+0

伟大的帮助,谢谢你,虽然我用:ArrayList uris = getIntent()。getParcelableArrayListExtra(“uriArray”);我的代码与此不同。 – user1105748

0

可以使用的JSONObject包裹任何对象,quickle字符串化它。从字符串返回JSON真的很平凡