gpt4 book ai didi

android - 解码未知类型代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:35 25 4
gpt4 key购买 nike

我基本上想做的是将 Parcelable 对象作为 Intent extra 传递。

这是我经过的地方,

final Intent intent = new Intent(_context,
AddReminderActivity.class);

final Bundle bundle = new Bundle();
bundle.putString(AddReminderActivity.EXTRA_MODE, AddReminderActivity.MODE_EDIT);
bundle.putParcelable(AddReminderActivity.EXTRA_REMINDER, _reminders.get(position));

intent.putExtras(bundle);
_context.startActivity(intent);

_reminders是一个 ArrayList<Reminder>

这是我的 Reminder

package au.com.elegantmedia.vetcheck.objects;

import android.os.Parcel;
import android.os.Parcelable;


public class Reminder implements Parcelable {

private long _id;
private String _message = "n/a";
private String _medication = "n/a";
private String _dosage = "n/a";
private String _date = "n/a";
private String _time = "n/a";
private int _repeatID = 0; // 1-once, 2-hourly, 3-daily, 4-weekly, 5-monthly
private String _repeat = "n/a";
private int _requestCode = 0;

private static int REPEAT_ID_ONCE = 1;
private static String REPEAT_ONCE = "once";
private static int REPEAT_ID_HOURLY = 2;
private static String REPEAT_HOURLY = "hourly";
private static int REPEAT_ID_DAILY = 3;
private static String REPEAT_DAILY = "daily";
private static int REPEAT_ID_WEEKLY = 4;
private static String REPEAT_WEEKLY = "weekly";
private static int REPEAT_ID_MONTHLY = 5;
private static String REPEAT_MONTHLY = "monthly";

public Reminder() {
// TODO Auto-generated constructor stub
}

public Reminder(Parcel source) {
_id = source.readInt();
_message = source.readString();
_medication = source.readString();
_dosage = source.readString();
_date = source.readString();
_time = source.readString();
_repeatID = source.readInt();
_repeat = source.readString();
_requestCode = source.readInt();
}

public long getID() {
return _id;
}

public void setID(long id) {
_id = id;
}

public String getMessage() {
return _message;
}

public void setMessage(String message) {
if(!message.equals("")) {
_message = message;
}
}

public String getMedication() {
return _medication;
}

public void setMedication(String medication) {
if(!medication.equals("")) {
_medication = medication;
}
}

public String getDosage() {
return _dosage;
}

public void setDosage(String dosage) {
if(!dosage.equals("")) {
_dosage = dosage;
}
}

public String getDate() {
return _date;
}

public void setDate(String date) {
if(!date.equals("")) {
_date = date;
}
}

public String getTime() {
return _time;
}

public void setTime(String time) {
if(!time.equals("")) {
_time = time;
}
}

public void setRepeatID(String repeat) {
if(repeat.equals(REPEAT_ONCE)) {
_repeatID = REPEAT_ID_ONCE;
}
else if(repeat.equals(REPEAT_HOURLY)) {
_repeatID = REPEAT_ID_HOURLY;
}
else if(repeat.equals(REPEAT_DAILY)) {
_repeatID = REPEAT_ID_DAILY;
}
else if(repeat.equals(REPEAT_WEEKLY)) {
_repeatID = REPEAT_ID_WEEKLY;
}
else if(repeat.equals(REPEAT_MONTHLY)) {
_repeatID = REPEAT_ID_MONTHLY;
}
}

public int getRepeatID() {
return _repeatID;
}

public void setRepeat(int repeatID) {
_repeatID = repeatID;

if(repeatID == REPEAT_ID_ONCE) {
_repeat = REPEAT_ONCE;
}
else if(repeatID == REPEAT_ID_HOURLY) {
_repeat = REPEAT_HOURLY;
}
else if(repeatID == REPEAT_ID_DAILY) {
_repeat = REPEAT_DAILY;
}
else if(repeatID == REPEAT_ID_WEEKLY) {
_repeat = REPEAT_WEEKLY;
}
else if(repeatID == REPEAT_ID_MONTHLY) {
_repeat = REPEAT_MONTHLY;
}
}

public String getRepeat() {
return _repeat;
}

public void setRequestCode(int requestID) {
_requestCode = requestID;
}

public int getRequestCode() {
return _requestCode;
}

// parceling part
public static final Parcelable.Creator<Reminder> CREATOR = new Parcelable.Creator<Reminder>() {

@Override
public Reminder createFromParcel(Parcel source) {
return new Reminder(source);
}

@Override
public Reminder[] newArray(int size) {
return new Reminder[size];
}
};

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(_id);
dest.writeString(_message);
dest.writeString(_medication);
dest.writeString(_dosage);
dest.writeString(_date);
dest.writeString(_time);
dest.writeInt(_repeatID);
dest.writeInt(_requestCode);
}
}

我遇到的问题是,当从调用者 Activity 传递包时,它是这样的,

Bundle[{reminder=au.com.elegantmedia.vetcheck.objects.Reminder@41fade98, mode=edit}]

意味着一切都按预期设置,但是当尝试从被调用者 Activity (final Bundle bundle = getIntent().getExtras();) 访问额外内容时,如下所示,

Bundle[mParcelledData.dataSize=308]

此时我尝试按如下方式访问包,

if(bundle.getString(EXTRA_MODE).equals(MODE_ADD)) {

}
else if(bundle.getString(EXTRA_MODE).equals(MODE_EDIT)) {
final Reminder reminder = getIntent().getParcelableExtra(EXTRA_REMINDER);
populateData(reminder);
}

我遇到了以下异常

E/AndroidRuntime(17991): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@416ee8b0: Unmarshalling unknown type code 6357102 at offset 172

这是我对 Parcelable 对象的第一次尝试,所以我不太清楚这意味着什么,谷歌搜索了几个小时并没有完全帮助缩小问题范围。

最佳答案

您的 _idlong 类型,您将其解码为 int 类型:

    _id = source.readInt();

不应该吗

    _id = source.readLong();

我还注意到您阅读的顺序与写入包裹的顺序不同。 _repeat 编码时未写入包裹。

关于android - 解码未知类型代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18733924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com