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,然后读取接收器中的文件。