【问题标题】:Read parcelable not working while writing does写入时读取parcelable不起作用
【发布时间】:2012-06-12 06:21:37
【问题描述】:

我是 使用parecable将数据从一个服务发送到另一个服务,当我写入数据包含正确的值但从parcelable读取数据时它返回空值。

谁能告诉我这段代码有什么问题?

可打包类

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();

    }
}

放置parcelable对象。

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

读取 parcelable 对象。

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

有人遇到过这个问题吗?

【问题讨论】:

  • 你试过删除parcel.setDataPosition(0);
  • parcel.setDataPosition(0); 是的,这可能就是问题所在。
  • 谢谢,但我试过它不起作用

标签: android android-intent parcelable


【解决方案1】:

添加以下构造函数:

public FindDeviceConfig(Parcel data) {
    this.numberoftime  = data.readString();
    this.interval = data.readString();
 } 

【讨论】:

  • 我已经在我的代码中添加了这个构造函数,见代码底部
  • 试试下面的 bundle b = new bundle(); b.putParcelable("finddevice_config", config);意图.putExtras(b);读取可打包对象 Bundle bundle = getIntent().getExtras(); FindDeviceConfig config = bundle.getParcelable(""finddevice_config"");
【解决方案2】:

我遇到了同样的问题,但有不同的解决方案,所以在这里发布以供将来参考。

在使用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
} 

编码愉快:)

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2021-08-11
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多