[英]Pass Provider as extra of Intent
I have a provider that takes a decent number of properties. 我有一个提供大量属性的提供程序。 For example: 例如:
public MyProvider(
byte[] image,
String firstName,
String nickName,
String lastName,
String hairColor,
String favoriteFood,
String favoriteColor,
String cityBorn,
String stateBorn,
long favoriteNumber,
int age,
String nameOfFather,
String nameOfMother,
String nameOfBestFriend
)
I do know that I can get the value of each property, and set each individual one as an extra, like so: 我确实知道我可以获取每个属性的值,并将每个单独的属性都设置为额外属性,如下所示:
Intent myIntent = new Intent(firstActivity.this, secondActivity.class);
myIntent.putExtra("firstName", myProvider.getFirstName().toString());
myIntent.putExtra("nickName", myProvider.getNickName().toString());
...
firstActivity.this.startActivity(myIntent);
I would like to just pass the entire provider as an extra, and then be able to get the provider in the next activity. 我想将整个提供程序作为额外的传递,然后能够在下一个活动中获得该提供程序。 I know it's possible to do such a thing in Swift, but I am not sure how to do so in Java for Android Studio. 我知道可以在Swift中执行此操作,但是我不确定如何在Java for Android Studio中执行此操作。
What I am hoping to be able to do is something like the following: 我希望能够执行的操作类似于以下内容:
MyProvider newPerson = new MyProvider(image, firstName, nickName, lastName, hairColor, favoriteFood, favoriteColor, cityBorn, stateBorn, favoriteNumber, age, nameOfFather, nameOfMother, nameOfBestFriend);
intent.putExtra(newPerson);
But it seems like a provider cannot be passed like this (or possibly at all?). 但是似乎提供者无法像这样(或者可能根本没有通过)传递。
Alternative Attempt: 替代尝试:
.setData
is specifically for URIs. 我也尝试将它作为URI之类的数据进行传递( 请参阅此处 ),但是.setData
是专门用于URI的。 Is there such a way to pass the entire provider as an extra, and then be able to get the provider in the next activity? 有没有一种方法可以让整个提供者额外获得,然后在下一个活动中获得该提供者?
Thanks in advance. 提前致谢。
EDIT 编辑
I have implemented Parcelable
as @NabinBhandari and @JuanCruzSoler suggested, but it is causing the following error: 我已经实现Parcelable
为@NabinBhandari和@JuanCruzSoler建议,但它导致了以下错误:
Cannot resolve constructor 'MyProvider(byte[], java.lang.String, long)' 无法解析构造函数“ MyProvider(byte [],java.lang.String,长)”
when I call: 当我打电话给:
MyApartmentsProvider newApartment = new MyApartmentsProvider(image, firstName, favoriteNumber);
My updated MyProvider.java
is as follows: 我更新的MyProvider.java
如下:
(note: I cut out some variables for the time being to make the example easier to work with) (注意:我暂时删除了一些变量,以使示例更易于使用)
import android.os.Parcel;
import android.os.Parcelable;
public class MyProvider implements Parcelable {
/////////////////////////
// Initializers
byte[] image;
String firstName;
long favoriteNumber;
// End of [Initializers]
/////////////////////////
/////////////////////////
// Getters
public byte[] getImage() {
return image;
}
public String getFirstName() {
return firstName;
}
public long getFavoriteNumber() {
return favoriteNumber;
}
// End of [Getters]
/////////////////////////
/////////////////////////
// Setters
public void setImage(byte[] image) {
this.image = image;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setFavoriteNumber(long favoriteNumber) {
this.favoriteNumber = favoriteNumber;
}
// End of [Setters]
/////////////////////////
public MyProvider() {
super();
}
public MyProvider(Parcel parcel) {
image = new byte[parcel.readInt()];
parcel.readByteArray(image);
this.firstName = parcel.readString();
this.favoriteNumber = parcel.readLong();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(image.length);
parcel.writeByteArray(image);
parcel.writeString(this.firstName);
parcel.writeLong(this.favoriteNumber);
}
public static final Creator<MyProvider> CREATOR=new Creator<MyProvider>() {
@Override
public MyProvider createFromParcel(Parcel parcel) {
return new MyProvider(parcel);
}
@Override
public MyProvider[] newArray(int i) {
return new MyProvider[i];
}
};
}
Make your Provider
class implement the interface Serializable
or Parcelable
. 使您的Provider
类实现接口Serializable
或Parcelable
。
Parcelable
is faster but Serializable
is easier to implement. Parcelable
的速度更快,但可Serializable
的易于实现。
To send: 发送:
intent.putExtra(KEY, yourObj);
To receive: 接受:
Provider provider = (Provider) getIntent().getSerializableExtra(KEY);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.