5

いくつかのワーカーのリストを持つアクティビティ WorkerActivity があり、クリックされたワーカー オブジェクトを WorkerDetailActivity に渡そうとしています。私はJavaとAndroidに比較的慣れていないので、可能な解決策を探していました.
オブジェクトのリスト?

コードの最後の 3 行で、in.readList(machinePossession, null); 次のエラーが表示されます。

型の不一致: void から List<Machine> に変換できません

これに対処する方法がわかりません。どんな提案でも喜んで受け入れます。


投稿されたコードをきれいに保つために、パッケージとすべてのコンストラクター、セッター、およびゲッターを削除しました。

import java.util.ArrayList;
import java.util.List;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

public class Worker implements Parcelable{

private String workerID;
private String workerPersonnelNR;
private String workerLastName;
private String workerName;
private String workerCategory;
private String historyName;
private String historyID;
private String historyFrom;
private String historyTo;
private String historyActive;
private String historyDays;
public List<Machine> machinePossession = new ArrayList<Machine>();
public List<Machine> machinePossibility = new ArrayList<Machine>();
public List<Machine> machineHistory = new ArrayList<Machine>();


public String error;

public static class WorkerWrapper{

    public List<Worker> workers;

    public WorkerWrapper(List<Worker> workers) {
        this.workers = workers;
    }
}

public Worker(){
    //default constructor
}

    /*REMOVED CONSTRUCTORS / SETTERS / GETTERS */

//parcel
public void writeToParcel(Parcel dest, int flags) {
    Log.v("", "writeToParcel..." + flags);
    dest.writeString(workerID);
    dest.writeString(workerPersonnelNR);
    dest.writeString(workerLastName);
    dest.writeString(workerName);
    dest.writeString(workerCategory);
    dest.writeString(historyName);
    dest.writeString(historyID);
    dest.writeString(historyFrom);
    dest.writeString(historyTo);
    dest.writeString(historyActive);
    dest.writeString(historyDays);        
    dest.writeList(machinePossession);
    dest.writeList(machinePossibility);
    dest.writeList(machineHistory);
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public Worker createFromParcel(Parcel in) {
        return new Worker(in);
    }

    public Worker[] newArray(int size) {
        return new Worker[size];
    }
};

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

private Worker(Parcel in) {
    workerID = in.readString();
    workerPersonnelNR = in.readString();
    workerLastName = in.readString();
    workerName = in.readString();
    workerCategory = in.readString();
    historyName = in.readString();
    historyID = in.readString();
    historyFrom = in.readString();
    historyTo = in.readString();
    historyActive = in.readString();
    historyDays = in.readString(); 
    machinePossession = in.readList(machinePossession, null);
    machinePossibility = in.readList(machineHistory, null);
    machineHistory = in.readList(machineHistory, null);
    }
}

編集:

@Archie.bpgc に感謝し
ますエラーを取り除くには、次のようにコーディングする必要があります。

private Worker(Parcel in) {
    workerID = in.readString();   
    ....
    historyDays = in.readString(); 
    in.readList(machinePossession, null);
    in.readList(machineHistory, null);
    in.readList(machineHistory, null);
    }
4

3 に答える 3

3

それはあなたのmachinePossession is a List of <Machine>

in.readList(machinePossession, null) returns void

したがって、このステップでは:

machinePossession = in.readList(machinePossession, null);

あなたが得る

型の不一致: void から List に変換できません

守ろうとしながらvoid in a List<Machine>

ドキュメントから

public final void readList (リスト outVal、ClassLoader ローダー)

API レベル 1 で追加されました。現在の dataPosition() にあるパーセルから既存の List オブジェクトを読み取り、指定されたクラス ローダーを使用して同封されたパーセルブルをロードします。null の場合、デフォルトのクラスローダーが使用されます。

だから、私は思う

in.readList(machinePossession, null);

十分であろう。に割り当てないでList<machine>、代わりに使用してくださいread in to

于 2013-02-22T06:48:44.150 に答える
0

これには非常に簡単な解決策があります。Object が parcelable または serializable を実装するクラスに属している場合。次のように実行できます。

ワーカー クラスが parcelable を実装しているためです。

アクティビティ 1 から

Bundle bundle = new Bundle();
bundle.putParcelable("worker", workerObject);
bundle.putParcelableArray("workerArray", workerArrayObject);
bundle.putParcelableArrayList("workerArrayList", workerArrayList);
Intent i = new Intent(this, Activity2.class);
i.putExtras(bundle);
startActivity(i);

Activity2 の onCreate() 内

Bundle bundle = getIntent().getExtras();
Worker workerObject = bundle.getParceable("worker");
Worker[] workerArray = bundle.getParceableArray("workerArray");
ArrayList<Worker> workerArrayList = bundle.getParceableArrayList("workerArrayList");

typeCasting を処理すれば準備完了です...

それが役に立てば幸い

于 2013-02-22T06:52:25.187 に答える