Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Parceble在活动之间进行通信_Android - Fatal编程技术网

Android 使用Parceble在活动之间进行通信

Android 使用Parceble在活动之间进行通信,android,Android,因此,我尝试使用android中提供的Parceble将我的对象从一个活动传递到另一个活动,因为在这种情况下使用它是正确的 这是我的Bean类,通过实现Parceble Customer.class public class Customer implements Parcelable { int a; String name; public Customer(int ab , String n) { this.a=ab; this.name=n;

因此,我尝试使用android中提供的
Parceble
将我的对象从一个活动传递到另一个活动,因为在这种情况下使用它是正确的

这是我的Bean类,通过实现
Parceble

Customer.class

public class Customer implements Parcelable {

    int a;
    String name;

    public Customer(int ab , String n) {
    this.a=ab;
    this.name=n;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public String getName() {
        return name;
    }

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


    public Customer(Parcel in) {
         a= in.readInt();   
         name= in.readString();
        //readFromParcel(in);
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

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

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

        @Override
        public Customer createFromParcel(Parcel source) {
            return new Customer(source);
        }

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


    private void readFromParcel(Parcel in) {

        a= in.readInt();    
        name= in.readString();
   }
}
public class MainActivity extends Activity {

    Button b;
    Customer c;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b=(Button) findViewById(R.id.button1);

        c=new Customer(33,"nn");

        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i=new Intent(MainActivity.this,CustomActivity.class);
                i.putExtra("myobj", c);
                startActivity(i);
            }
        });
    }

}
public class CustomActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent it=getIntent();
        Customer c=(Customer)it.getParcelableExtra("myobj");

        System.out.println("and object is "+c.getA()+"/"+c.getName());
    }
}
CustomActivity.class

public class Customer implements Parcelable {

    int a;
    String name;

    public Customer(int ab , String n) {
    this.a=ab;
    this.name=n;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public String getName() {
        return name;
    }

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


    public Customer(Parcel in) {
         a= in.readInt();   
         name= in.readString();
        //readFromParcel(in);
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

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

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

        @Override
        public Customer createFromParcel(Parcel source) {
            return new Customer(source);
        }

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


    private void readFromParcel(Parcel in) {

        a= in.readInt();    
        name= in.readString();
   }
}
public class MainActivity extends Activity {

    Button b;
    Customer c;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b=(Button) findViewById(R.id.button1);

        c=new Customer(33,"nn");

        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i=new Intent(MainActivity.this,CustomActivity.class);
                i.putExtra("myobj", c);
                startActivity(i);
            }
        });
    }

}
public class CustomActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent it=getIntent();
        Customer c=(Customer)it.getParcelableExtra("myobj");

        System.out.println("and object is "+c.getA()+"/"+c.getName());
    }
}
这是我在Logcat中的输出:

05-15 12:02:56.014: I/System.out(25581): and object is 2/null

问题出在您的
readFromParcel
方法中。规则是“在写入或读取可包裹对象的成员时,成员的顺序必须相同。”

因此,您必须更改
readFromParcel(Parcel in)
from

private void readFromParcel(Parcel in) {    
        a= in.readInt();    
        name= in.readString();
   }

因为您的
writeToParcel(..)
首先写入
name
,然后写入
a


可以给你一个很好的参考

问题出在您的
readFromParcel
方法中。规则是“在写入或读取可包裹对象的成员时,成员的顺序必须相同。”

因此,您必须更改
readFromParcel(Parcel in)
from

private void readFromParcel(Parcel in) {    
        a= in.readInt();    
        name= in.readString();
   }

因为您的
writeToParcel(..)
首先写入
name
,然后写入
a


可以给你一个很好的参考

这是
Parcelable
,不是parcelble。@adrianp感谢我的输入错误,我没有从代码中粘贴它,只是写了它。这是
Parcelable
,不是parcelble。@adrianp感谢我的输入错误,我没有从代码中粘贴它,只是写了它。好的,我必须维护
writeToParcel
的顺序。好的,因此,我必须维护
writeToParcel
的顺序。