में writeStringArray() और readStringArray() का उपयोग कैसे करें मैं हाल ही में Androids Parcel
कक्षा के अंदर एक बहुत बेवकूफ (कम से कम मेरे दृष्टिकोण से) कार्यान्वयन में आया था।एक पार्सल
मान लीजिए मैं इस
class Foo implements Parcelable{
private String[] bars;
//other members
public in describeContents(){
return 0;
}
public void writeToParcel(Parcel dest, int flags){
dest.writeStringArray(bars);
//parcel others
}
private Foo(Parcel source){
source.readStringArray(bars);
//unparcel other members
}
public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>(){
public Foo createFromParcel(Parcel source){
return new Foo(source);
}
public Foo[] newArray(int size){
return new Foo[size];
}
};
}
की तरह एक साधारण वर्ग अब है, अगर मैं एक Foo
वस्तु पार्सल करना चाहते हैं और bars
रिक्त है मैं (exept पाठ्यक्रम के अपवाद को पकड़ने के) इस स्थिति से उबरने के लिए कोई रास्ता नहीं देख । अगर मैं bars
जो अशक्त हैं पारित
public final void writeStringArray(String[] val) {
if (val != null) {
int N = val.length;
writeInt(N);
for (int i=0; i<N; i++) {
writeString(val[i]);
}
} else {
writeInt(-1);
}
}
public final void readStringArray(String[] val) {
int N = readInt();
if (N == val.length) {
for (int i=0; i<N; i++) {
val[i] = readString();
}
} else {
throw new RuntimeException("bad array lengths");
}
}
तो writeStringArray ठीक है: यहाँ पार्सल से इन दोनों तरीकों का कार्यान्वयन है। यह पार्सल में -1
लिखता है। लेकिन विधि पढ़ने के तरीके को कैसे पढ़ा जाता है? अगर मैं अंदर bars
पास करता हूं (जो निश्चित रूप से शून्य है) मुझे val.length
से एक NullPointerException मिलेगा। अगर मैं कहने से पहले bars
बना देता हूं तो मुझे कोई संकेत नहीं मिलता कि यह कितना बड़ा होना चाहिए। यदि आकार अंदर लिखा गया मिलान से मेल नहीं खाता है तो मुझे एक रनटाइम अपवाद प्राप्त होता है।
readStringArray
-1
के परिणाम से अवगत नहीं है जो writeStringArray
से शून्य वस्तुओं पर लिखा जाता है और केवल लौटाता है?
writeStringArray(String[])
पर कॉल करने से पहले मुझे लगता है कि bars
का आकार सहेजना एकमात्र तरीका है जो इस विधि को बेकार बनाता है। यह अनावश्यक रूप से ऐरे के आकार को दोबारा बचाएगा (मुझे याद रखने के लिए एक बार, writeStringArray
से दूसरी बार)।
क्या किसी को पता है कि इन दो तरीकों का उपयोग कैसे किया जाना चाहिए, क्योंकि उनके लिए कोई जावा-डॉक नहीं है?
धन्यवाद। इन निर्माण * कार्यों को कभी नोटिस न करें। मैं अभी भी इस सवाल को थोड़ा सा खोल दूंगा, ताकि कोई मुझे उस बदसूरत विधि के लिए एक उद्देश्य दे सके। –