2012-10-17 15 views
5

का उपयोग कर रहा जरूरत, एक और गतिविधि के उरी की एक सरणी पारित करने के लिए स्ट्रिंग की एक सरणी मैं बसकैसे बंडल

String[] images=getImagesPathString(); 

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

का उपयोग पारित करने के लिए लेकिन उरी

की एक सरणी का उपयोग कर गतिविधि के बीच उरी की एक सरणी पारित करने के लिए
Uri[] imagesUri=getImagesUri(); 

यह नहीं काम करता है बंडल

में क्योंकि वहाँ एक तरीका है "putUri (उरी 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

Google "पार्सल करने योग्य एंड्रॉइड को कार्यान्वित करना"। पहले अपने लिए प्रयास करें, और अगर आप इसे प्राप्त नहीं कर सकते हैं तो वापस आओ। – Phix

+0

उरी की सरणी किसी अन्य वस्तु में घोंसला है। मुझे नहीं पता कि यह वास्तव में कैसे कर सकता है। – AndreaF

3

उरी parcelable नहीं है? आप पार्सेलबल तत्वों (उरी) की एक सरणी बनाने की कोशिश कर सकते हैं और इसे बंडल में डाल सकते हैं।

6

मुझे पता है कि सादे सरणी को बंडलों में नहीं रखा जा सकता है। लेकिन आप उरी-एस को ऐरेलिस्ट में डाल सकते हैं और फिर बंडल .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

यह दूसरा ब्लॉक बंडल से पढ़ने के लिए है, इसलिए यह होना चाहिए। अपनी दूसरी गतिविधि में क्रिएट() – marcinj

+0

ग्रेट हेल्प आपको धन्यवाद देता है हालांकि मैंने उपयोग किया: ऐरेलिस्ट uris = getIntent()। getParcelableArrayListExtra ("uriArray"); मेरा कोड इसके अलावा एक जैसा है। – user1105748

0

आप JSONObject उपयोग कर सकते हैं किसी भी वस्तु लपेट और यह quickle stringify करने के लिए। स्ट्रिंग से जेएसओएन पर वापस जाकर वास्तव में मामूली

संबंधित मुद्दे