Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Parcelable writeToParcel():什么';写相同类型的多个变量的最佳方法是什么?_Java_Android_Object_Parcelable_Parcel - Fatal编程技术网

Java Parcelable writeToParcel():什么';写相同类型的多个变量的最佳方法是什么?

Java Parcelable writeToParcel():什么';写相同类型的多个变量的最佳方法是什么?,java,android,object,parcelable,parcel,Java,Android,Object,Parcelable,Parcel,我有十个字符串:str1,str2,str3…,str10(不是实际的字符串名)。我必须为所有10个字符串执行dest.writeString(str_n)吗?或者有更简单的方法吗?我怎样才能把它们读回来呢 例如: @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(str1); dest.writeString(str2); dest

我有十个字符串:str1,str2,str3…,str10(不是实际的字符串名)。我必须为所有10个字符串执行dest.writeString(str_n)吗?或者有更简单的方法吗?我怎样才能把它们读回来呢

例如:

@Override
public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(str1);       
      dest.writeString(str2);   
      dest.writeString(str3);   
      dest.writeString(str4);   
      dest.writeString(str5);   
      dest.writeString(str6);   
      dest.writeString(str7);   
      dest.writeString(str8);   
      dest.writeString(str9);
      dest.writeString(str10);      
}

正如你所看到的,这可能会变得非常冗长。任何建议都会有帮助!谢谢

要编写它们,可以按照建议的快捷方式编写字符串数组。然而,读回它们时,您仍然需要一个接一个地将它们分配回

您可以编写几个实用程序方法:

public static void writeStrings(Parcel out, String... strings) {
    out.writeInt(strings.length);
    for (String string : strings) {
        out.writeString(string);
    }
}

public static String[] readStrings(Parcel in) {
    final String[] strings = new String[in.readInt()];
    for (int i = 0; i < strings.length; i++) {
        strings[i] = in.readString();
    }
    return strings;
}
阅读它们:

String[] strings = readStrings(dest);
str1 = strings[0];
str2 = strings[1];
str3 = strings[2];
str4 = strings[3];
str5 = strings[4];

老实说,为了可维护性和可读性,我建议不要在这里做太聪明的事情,而是一个接一个地写出来。包裹是一个很好的机制;不幸的是,对于这样的情况,要简化样板文件,您无能为力。

如果您的
Parcelable
类中有10个字符串,并且您希望恢复它们的值,那么这就是方法。您可以通过创建一个
Parcelable.Creator
和一个接受地块对象作为其参数的私有构造函数将它们读回,然后在该构造函数中,您可以按照调用
writeString()
的相同顺序对地块调用
readString()
。看

它看起来像这样:

public class MyParcelable implements Parcelable {

     private String str1;
     private String str2;
     private String str3;
     private String str4;
     private String str5;
     private String str6;
     private String str7;
     private String str8;
     private String str9;
     private String str10;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(str1);       
      dest.writeString(str2);   
      dest.writeString(str3);   
      dest.writeString(str4);   
      dest.writeString(str5);   
      dest.writeString(str6);   
      dest.writeString(str7);   
      dest.writeString(str8);   
      dest.writeString(str9);
      dest.writeString(str10);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

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

     private MyParcelable(Parcel in) {
         str1 = in.readString();       
         str2 = in.readString();       
         str3 = in.readString();       
         str4 = in.readString();       
         str5 = in.readString();       
         str6 = in.readString();       
         str7 = in.readString();       
         str8 = in.readString();       
         str9 = in.readString();       
         str10 = in.readString();       
     }
 }
公共类MyParcelable实现了Parcelable{
私有字符串str1;
私有字符串str2;
私有字符串str3;
私有字符串str4;
私有字符串str5;
专用字符串str6;
私有字符串str7;
专用字符串str8;
私有字符串str9;
私有字符串str10;
公共int描述内容(){
返回0;
}
公共无效写入包裹(包裹目的地,内部标志){
目的地书面资本(str1);
目的地书面资本(str2);
目的地书面资本(str3);
目的地书面资本(str4);
目的地书面资本(str5);
目的地书面资本(str6);
目的地书面资本(str7);
目的地书面资本(str8);
目的地书面资本(str9);
目的地书面资本(str10);
}
公共静态最终包裹。创建者
=新的Parcelable.Creator(){
公共MyParcelable createFromParcel(中的地块){
返回新的MyParcelable(在中);
}
公共MyParcelable[]新数组(整数大小){
返回新的MyParcelable[大小];
}
};
私人MyParcelable(包裹内){
str1=in.readString();
str2=in.readString();
str3=in.readString();
str4=in.readString();
str5=in.readString();
str6=in.readString();
str7=in.readString();
str8=in.readString();
str9=in.readString();
str10=in.readString();
}
}

writeStringArray?你试过了吗?我该如何将它们读回每个变量?只需读取packet.readString*Documentation感谢你以调用
writeString()
Yea的相同顺序读取值这个问题的最佳答案如下:以写入packetable的相同顺序读取值:)有可能在packet中写入向量吗?
public class MyParcelable implements Parcelable {

     private String str1;
     private String str2;
     private String str3;
     private String str4;
     private String str5;
     private String str6;
     private String str7;
     private String str8;
     private String str9;
     private String str10;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(str1);       
      dest.writeString(str2);   
      dest.writeString(str3);   
      dest.writeString(str4);   
      dest.writeString(str5);   
      dest.writeString(str6);   
      dest.writeString(str7);   
      dest.writeString(str8);   
      dest.writeString(str9);
      dest.writeString(str10);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

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

     private MyParcelable(Parcel in) {
         str1 = in.readString();       
         str2 = in.readString();       
         str3 = in.readString();       
         str4 = in.readString();       
         str5 = in.readString();       
         str6 = in.readString();       
         str7 = in.readString();       
         str8 = in.readString();       
         str9 = in.readString();       
         str10 = in.readString();       
     }
 }