-1

pracelable オブジェクトを作成し、作成した別のアプリケーションから受信するときに問題が発生します。オブジェクトを取得しようとするたびに、アンマーシャリング時に常に BadParcelableException: ClassNotFoundException であることが判明しました。

別のアプリに送信したらダメだったのかな?または、コードにエラーがあっただけです。

どこで間違ったのか教えてください。

私の送信行:

ParcelableObject myObject = new ParcelableObject();
myObject = new ParcelableObject(result_name, resut_lv, result_race, 
    result_job, result_nation, result_guild, result_mission);
intent.putExtra("ACTION_DATA_TRANSFER", myObject);
intent.setClassName(target_app, target_app+".ReceiveMain");
startActivity(intent);

私の受信行:

ParcelableObject myObject = new ParcelableObject();
myObject = getIntent().getParcelableExtra("ACTION_DATA_TRANSFER"); //always crashed at this line

if (getIntent().hasExtra("ACTION_DATA_TRANSFER")) {
    Log.w("****CHECKING****", myObject.getName());
    item1.setText("The Character's name is: " + myObject.getName());
} else {
    Toast.makeText(getApplicationContext(), "There is not data passed yet", 
        Toast.LENGTH_LONG).show();
}

私の ParcelableObject クラス:

private String name;
private int lv;
private String race;
private String job;
private String nation;
private String guild;
public String mission;

public void setName(String name) {
    this.name = name;
}

public void setLv(int lv) {
    this.lv = lv;
}

public void setRace(String race) {
    this.race = race;
}

public void setJob(String job) {
    this.job = job;
}

public void setNation(String nation) {
    this.nation = nation;
}

public void setGuild(String guild) {
    this.guild = guild;
}

public void setMission(String mission) {
    this.mission = mission;
}

public ParcelableObject(String name, int lv, String race, String job, String
     nation, String guild, String mission) {
    // TODO Auto-generated constructor stub
    this.name = name;
    this.lv = lv;
    this.race = race;
    this.job = job;
    this.nation = nation;
    this.guild = guild;
    this.mission = mission;
}

public String getName() {
    return name;
}

public int getLv() {
    return lv;
}

public String getRace() {
    return race;
}

public String getJob() {
    return job;
}

public String getNation() {
    return nation;
}

public String getGuild() {
    return guild;
}

public String getMission() {
    return mission;
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    Log.w("****PO CHECKING****", "describeContents called");
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    Log.w("****PO CHECKING****", "writeToParcel called");
    dest.writeString(name);
    dest.writeString(job);
    dest.writeInt(lv);
    dest.writeString(race);
    dest.writeString(guild);
    dest.writeString(nation);       
    dest.writeString(mission);
}

public ParcelableObject() {
    // TODO Auto-generated constructor stub
    super();
    Log.i("**check if exist**", "start parcel");
}

public static final Parcelable.Creator<ParcelableObject> CREATOR = 
    new Parcelable.Creator<ParcelableObject>() {

    @Override
    public ParcelableObject createFromParcel(Parcel in) {
        // TODO Auto-generated method stub
        Log.w("checking out", "createFromParcel");
        ParcelableObject pObject = new ParcelableObject();
        pObject.name = in.readString();
        pObject.job = in.readString();
        pObject.lv = in.readInt();
        pObject.race = in.readString();
        pObject.guild = in.readString();
        pObject.nation = in.readString();
        pObject.mission = in.readString();

        return pObject;
    }

    @Override
    public ParcelableObject[] newArray(int size) {
        // TODO Auto-generated method stub
        return new ParcelableObject[size];
    }
};

編集: 一部の人々が私を怠け者だと思う前に明確にするために、私はこの原因を解決するための答えを探していましたが、運がありませんでした. 多くの人のコードを調べて何度もテストしましたが、それでも自分のアプリを正しく取得できません。それが私が助けを求めるためにここにいる理由です。いまだに私を怠け者だと思っている人がいれば、私は怠け者で、そう結論づける人もいると思います。自分の行動をもう一度考え直さなければなりません。

私の状況は次のとおりです。

私は 2 つのアプリを作成しましたが、1 つはパーセル可能なオブジェクトを別のアプリケーションに送信しています。最初のアプリは、オブジェクトを別のアプリに送信するために正しく機能しています。ただし、2番目のアプリがそれを受け取ると、BadParcelableExceptionプロセスを実行するとうまくいきません。バンドルを使用する必要がないという例をたくさん見たので、バンドルを使用していません。私が間違っていた場合は、私を修正してください。

4

2 に答える 2

0

このトピックに関連する回答を見つけました... Parcelable を使用してアプリケーション間でデータを送信するのは正しい方法ですか?

上からコメントくださった皆様、ありがとうございます。...

于 2015-11-19T03:42:39.597 に答える
0

serializable代わりに を使用してケースを解決しましたParcelable

しかし、あなたの場合、このようにオブジェクトを解析してみてください

myObject = (ParcelableObject)getIntent().getParcelableExtra("ACTION_DATA_TRANSFER"); 
于 2015-11-19T08:39:55.357 に答える