Android 使用Parceble在活动之间进行通信
因此,我尝试使用android中提供的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;
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
的顺序。