parcelable writeToParcel():编写同一类型的多个变量的最佳方法是什么?

kyr*_*rax 0 java android object parcel parcelable

我有十个字符串: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);      
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这可能会变得非常冗长.任何建议都会有帮助!谢谢!

Dou*_*ton 12

如果你的Parcelable班级中有10个字符串并且你想恢复它们的值,那就是这样做的方法.您通过创建一个Parcelable.Creator接受Parcel对象作为参数的私有构造函数来读回它们,然后在该构造函数中以您调用的相同顺序调用readString()Parcel .请参阅http://developer.android.com/reference/android/os/Parcelable.htmlwriteString()

它看起来像这样:

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();       
     }
 }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您**按照您调用`writeString()`的顺序** (2认同)
  • 是的,这个问题的最佳答案如下所示:_&lt;start&gt;_**按照写入 Parcelable 的顺序读取值**_&lt;end&gt;_ :) (2认同)