intent.getParcelableExtra() 在 API 23 上工作,但不在 API 25 上工作
intent.getParcelableExtra() working on API 23 but not on API 25
我遇到了这个奇怪的问题,其中 intent.getParcelableExtra()
在 API 23 上运行正常,但在 [=45= 上运行不正常] 25,返回NULL.
以下是我用更少的代码重现问题的方法:
用户 class 例如:
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];
}
};
}
主要活动:
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");
}
}
我正在使用调试器停止执行并评估接收器中的 user 对象。
使用模拟器时 Android 6.0 API level 23 : 用户正确通过,但使用我的 phone Android 7.1.2 API 25级:用户是NULL
感谢任何帮助。
多亏了 CommonsWare,我才能够理解这个问题。它似乎与 Android 有关,我们对此无能为力,只能使用变通办法。
对于那些仍然想使用 Parcelable 的人,使用这个:How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?
对我来说,我将要传递的对象保存到文件中(使用json),然后将文件名作为字符串传递给AlarmManager
,然后读取接收器中的文件。
我遇到了这个奇怪的问题,其中 intent.getParcelableExtra()
在 API 23 上运行正常,但在 [=45= 上运行不正常] 25,返回NULL.
以下是我用更少的代码重现问题的方法:
用户 class 例如:
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];
}
};
}
主要活动:
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");
}
}
我正在使用调试器停止执行并评估接收器中的 user 对象。
使用模拟器时 Android 6.0 API level 23 : 用户正确通过,但使用我的 phone Android 7.1.2 API 25级:用户是NULL
感谢任何帮助。
多亏了 CommonsWare,我才能够理解这个问题。它似乎与 Android 有关,我们对此无能为力,只能使用变通办法。
对于那些仍然想使用 Parcelable 的人,使用这个:How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?
对我来说,我将要传递的对象保存到文件中(使用json),然后将文件名作为字符串传递给AlarmManager
,然后读取接收器中的文件。