parcel.writeString(null);不会持久存在或者至少它不可读。运行以下代码将导致以下异常。在真实设备或仿真器上运行测试没有问题。但是,如果我在使用API18的无头环境中运行测试,我遇到了这个问题。
@org.robolectric.annotation.Config(manifest= org.robolectric.annotation.Config.NONE)
@RunWith(RobolectricTestRunner.class)
public class PersistanceTest {
private static String TAG = PersistanceTest.class.getSimpleName();
@Test
public void testBasicParcel() {
Parcel parcel = Parcel.obtain();
parcel.writeString(null);
parcel.writeInt(10);
parcel.setDataPosition(0);
String readBackString = parcel.readString(); // <--Exception here
int readBackInt = parcel.readInt();
Log.d(TAG, "read back string: " + readBackString);
Log.d(TAG, "read back int: " + readBackInt);
parcel.recycle();
}
}
导致此异常
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at org.robolectric.shadows.ShadowParcel.readString(ShadowParcel.java:90)
at android.os.Parcel.readString(Parcel.java)
我找不到任何说明writeString / readString更改的文档。它是robolectric还是Android API18问题?