3

我有十个字符串: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);      
}

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

4

2 回答 2

13

如果您的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();       
     }
 }
于 2014-06-23T23:21:32.480 回答
1

为了编写它们,您可以按照建议执行快捷方式来编写字符串数组。但是,将它们重新读回,您仍然必须将它们一一分配。

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

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;
}

然后写它们:

writeStrings(dest, str1, str2, str3, str4, str5);

并阅读它们:

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

老实说,只是为了可维护性和可读性,我建议避免在这里做任何太聪明的事情,而只是将它们一一写出来。Parcelable 是一个很好的机制;不幸的是,对于这种情况,您无能为力来减少样板文件。

于 2014-06-23T23:17:51.503 回答