1

データに適切な値が含まれていると書き込みますが、parcelable からデータを読み取ると null 値を返します。

このコードの問題点を教えてもらえますか?

パーセルクラス

package com.airwatch.agent.finddevice;

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


/**
 * Represents the configuration supplied from device services 
 * regarding the  find device command.
 */
public class FindDeviceConfig implements Parcelable{
    public FindDeviceConfig() {
    }

    /**
     * number of loops to play ring-tone.
     */
    private String numberoftime;

    /**
     * Delay between loops - in seconds.
     */
    private String interval;

    public FindDeviceConfig(String numberoftime, String interval) {
        this.numberoftime = numberoftime;
        this.interval = interval;
    }

    public String getNumberoftime() {
        return numberoftime;
    }

    public void setNumberoftime(String numberoftime) {
        this.numberoftime = numberoftime;
    }

    public String getInterval() {
        return interval;
    }

    public void setInterval(String interval) {
        this.interval = interval;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        //dest.writeInt(Integer.parseInt(numberoftime));

        //dest.writeInt(Integer.parseInt(interval));
        dest.writeString(this.interval);
        dest.writeString(this.numberoftime);
    }

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

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

    public FindDeviceConfig(Parcel parcel)
    {
        parcel.setDataPosition(0);

        interval=parcel.readString();
        numberoftime=parcel.readString();

    }
}

パーセル可能なオブジェクトを配置します。

FindDeviceConfig config=new FindDeviceConfig("3","2");
intent.putExtra("finddevice_config", config);

パーセル可能なオブジェクトを読み取ります。

FindDeviceConfig config = intent.getParcelableExtra("finddevice_config");

誰でもこの問題に直面しましたか?

4

2 に答える 2

1

次のコンストラクターを追加します。

public FindDeviceConfig(Parcel data) {
    this.numberoftime  = data.readString();
    this.interval = data.readString();
 } 
于 2012-06-12T07:07:31.167 に答える
0

私は同じ問題を抱えていましたが、別の解決策を持っていたので、今後の参考のためにここに投稿してください。

使用中に心に留めておくべき最も重要なことParcelableは、Parcel に変数を書き込む順序は、それを読み取る順序でもあるということです。

例えば、

//wirting to Parcel
public void writeToParcel(Parcel dest, int flags) {       
    dest.writeString(this.interval); //interval first
    dest.writeString(this.numberoftime); //numberoftime second
} 

//reading from Parcel 
public FindDeviceConfig(Parcel parcel)
{  
    Wrong order -- this will not work or give unwanted result

    numberoftime=parcel.readString(); 
    interval=parcel.readString();
} 

//Correct Order
public FindDeviceConfig(Parcel parcel)
{           
    interval=parcel.readString(); //interval first
    numberoftime=parcel.readString(); //numberoftime second
} 

ハッピーコーディング:)

于 2016-07-05T19:18:06.040 に答える