ich dieses seltsame Problem habe, wo die intent.getParcelableExtra()
funktioniert gut auf API 23 aber nicht auf API 25, es kehrt NULL.intent.getParcelableExtra() auf API arbeiten 23 aber nicht auf API 25
Hier ist, wie ich das Problem mit weniger Code reproduziert:
User-Klasse als Beispiel:
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);
}
}
Und der Empfänger:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.os.Debug.waitForDebugger();
User user = intent.getParcelableExtra("user");
}
}
Ich bin Verwenden des Debuggers zum Stoppen der Ausführung und Auswerten des Objekts des Benutzers im Empfänger.
Wenn der Emulator Android 6.0 API-Ebene 23 mit: der Benutzer korrekt übergeben wird, aber wenn mein Handy Android 7.1.2 API-Ebene 25 mit: der Benutzer NULL
Jede Hilfe sehr geschätzt wird.
https://commonsware.com/blog/2016/07/22/be-careful-where-you-use-custom-parcelables.html – CommonsWare