2017-06-01 19 views
1

私はparceableクラスを作成し、それをフラグメントAからBへのデータ転送に使用したいと思います。他の多くのチュートリアルのようにしましたが、parceableオブジェクトクラスからインスタンス化できません。それは、私がパラメータとして 'Parcel in'に入れなければならないと常に言います。parceableオブジェクトをインスタンス化できません

ここに私のオブジェクトクラス:

public class DataObject implements Parcelable { 

private int number1 = 0; 
private int number2 = 0; 
private String name = ""; 

public int getNumber1() { 
    return number1; 
} 

public void setNumber1(int number1) { 
    this.number1 = number1; 
} 

public int getNumber2() { 
    return number2; 
} 

public void setNumber2(int number2) { 
    this.number2 = number2; 
} 

public String getName() { 
    return name; 
} 

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

protected DataObject(Parcel in) { 
    number1 = in.readInt(); 
    number2 = in.readInt(); 
    name = in.readString(); 
} 

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

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(number1); 
    dest.writeInt(number2); 
    dest.writeString(name); 
} 

@SuppressWarnings("unused") 
public static final Parcelable.Creator<DataObject> CREATOR = new Parcelable.Creator<DataObject>() { 
    @Override 
    public DataObject createFromParcel(Parcel in) { 
     return new DataObject(in); 
    } 

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

そして、ここで私は、このタイプのオブジェクトを使用する方法である:

DataObject (Parcel) in DataObject cannot be applied

DataObject bla = new DataObject(); 
bla.setNumber1(1); 
bla.setNumber2(2); 
bla.setName("TestName"); 

私は赤が、それは言うコンストラクタを強調ホバー

とコンパイラ:

Error:(30, 50) error: constructor PointCardMainData in class PointCardMainData cannot be applied to given types; required: Parcel found: no arguments reason: actual and formal argument lists differ in length

誰にも分からないことがありますか?明白なグラデルファイルに何かを設定する必要がありますか?プロジェクトを構築する前に何かしなければならないのですか?

よろしく

答えて

1

にコンストラクタを追加し、それがParcelからDataObjectを作成する方法を指定します。今では、小包なしでDataObjectを作ろうとしています。 のいずれかをParcelに追加する必要があります。DataObject bla = new DataObject();または新しいコンストラクタを追加してください。

だから、

Parcel theParcel = new Parcel(); 
DataObject bla = new DataObject(theParcel); 

書くかもしれないそれとも、

public DataObject(){ 
} 
+0

THX。最初の手で私はあなたの(とuser3374345s)解決策を試したと確信しています...なぜそれが今日働いているのか本当に不思議です。時々、私はあなたが正しい振る舞いを得るためにアンドロイドスタジオを再起動しなければならないという気持ちを持っています... 一方、私はなぜparcealable Objectチュートリアルのほとんどにヒントがないのでしょうか、空のコンストラクタを持っているのだろう... – user3806723

1

は、あなたのDataObjectクラスあなたがDataObjectクラスでただ1つのコンストラクタ書いた

public DataObject() 
{} 
+0

THXのようなあなたのDataObjectクラスのコンストラクタを持っているかもしれません!これは簡単でした:-P – user3806723

関連する問題