我遇到这个奇怪的问题,intent.getParcelableExtra()
在 API 23 上工作正常但在 API 25 上没有,它返回 NULL < /强>
以下是我用较少的代码重现问题的方法:
用户类为例:
public class User implements Parcelable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age =age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(name);
out.writeInt(age);
}
public User(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
/*setting view*/
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
User user = new User("test", 25);
intent.putExtra("user", user);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 3000, pendingIntent);
}
}
接收者:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.os.Debug.waitForDebugger();
User user = intent.getParcelableExtra("user");
}
}
我正在使用调试器来停止执行并评估接收器中的用户对象。
使用模拟器Android 6.0 API级别23时:用户正确传递,但使用我的手机Android 7.1.2 API级别25时:用户 NULL
感谢任何帮助。
答案 0 :(得分:0)
感谢CommonsWare,我能够理解这个问题。它似乎与Android有关,除了使用变通办法之外,我们无能为力。
对于仍想使用Parcelable的用户,请使用:How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?
对我来说,我保存了想要传递给文件的对象(使用json),然后我将文件名作为字符串传递给AlarmManager
,然后在接收器中读取文件。 / p>