Java 在同一活动中使用parcelable和intent
我在同一个活动中使用了2个意图。其中一个用于获取输入的Firstname、Lastname和Id。另一个意图用于向另一个活动发送数据。 但是当我使用像这样的意图时,代码不起作用。 我能用这样的意图吗Java 在同一活动中使用parcelable和intent,java,android,android-intent,android-activity,parcelable,Java,Android,Android Intent,Android Activity,Parcelable,我在同一个活动中使用了2个意图。其中一个用于获取输入的Firstname、Lastname和Id。另一个意图用于向另一个活动发送数据。 但是当我使用像这样的意图时,代码不起作用。 我能用这样的意图吗 intent.putExtra("lastName", intent2.getString("lastName")); 搜索活动 Intent intent = new Intent(getApplicationContext(),SearchActivity.class); Bundle b=
intent.putExtra("lastName", intent2.getString("lastName"));
搜索活动
Intent intent = new Intent(getApplicationContext(),SearchActivity.class);
Bundle b=new Bundle();
b.putString("firstName", firstName);
b.putString("lastName", lastName);
b.putString("id", id);
b.putParcelable("LoginPartClass",lp2);
intent.putExtras(b);
startActivity(intent);
搜索活动代码
final Bundle intent2 = getIntent().getExtras();
Intent intent = new Intent(getApplicationContext(),AnotherActivity.class);
intent.putExtra("keywords", keywords);
if(intent2!=null) {
final String Firstname=intent2.getString("firstName");
intent.putExtra("firstName", Firstname); }
intent.putExtra("lastName", intent2.getString("lastName"));
intent.putExtra("id", intent2.getString("id"));
}
startActivity(intent);
可分配类
public class LoginPart implements Parcelable{
private Token requestoken;
private OAuthService s;
private String authURL;
public LoginPart(Token Token, OAuthService S, String AuthURL) {
requestoken = Token;
s = S;
authURL = AuthURL;
}
public LoginPart( ) {
}
public Token getRequestoken() {
return requestoken;
}
public void setRequestoken(Token requestoken) {
this.requestoken = requestoken;
}
public OAuthService getS() {
return s;
}
public Parcelable getSParcelable() {
return (Parcelable) s;
}
public void setS(OAuthService s) {
this.s = s;
}
public String getAuthURL() {
return authURL;
}
public void setAuthURL(String authURL) {
this.authURL = authURL;
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeValue(requestoken);
dest.writeValue(s);
dest.writeValue(authURL);
}
}
问题与Parcable类有关。当我使用Parcable类时,会导致崩溃。我如何解决此问题?在您的第一个活动中:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("id", 1);
b.putString("firstName", "this is my first name");
b.putString("lastName", "this is my last name");
intent.putExtras(b);
startActivity(intent);
Bundle b =getIntent().getExtras();
String name =b.getString("firstName");
String lastname =b.getString("lastName");
在第二项活动中:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("id", 1);
b.putString("firstName", "this is my first name");
b.putString("lastName", "this is my last name");
intent.putExtras(b);
startActivity(intent);
Bundle b =getIntent().getExtras();
String name =b.getString("firstName");
String lastname =b.getString("lastName");
像这样更改您的LoginPart类
public class LoginPart implements Parcelable {
private Token requestoken;
private OAuthService s;
private String authURL;
public LoginPart(Token Token, OAuthService S, String AuthURL) {
requestoken = Token;
s = S;
authURL = AuthURL;
}
public LoginPart( ) {
}
public LoginPart(Parcel parcel) {
requestoken = parcel.readValue(getClassLoader());
s = parcel.readValue(getClassLoader());
authURL = parcel.readValue(getClassLoader());
}
public Token getRequestoken() {
return requestoken;
}
public void setRequestoken(Token requestoken) {
this.requestoken = requestoken;
}
public OAuthService getS() {
return s;
}
public Parcelable getSParcelable() {
return (Parcelable) s;
}
public void setS(OAuthService s) {
this.s = s;
}
public String getAuthURL() {
return authURL;
}
public void setAuthURL(String authURL) {
this.authURL = authURL;
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeValue(requestoken);
dest.writeValue(s);
dest.writeValue(authURL);
}
public static final Parcelable.Creator<LoginPart> CREATOR = new Creator<SecondActivity.LoginPart>() {
@Override
public LoginPart[] newArray(int size) {
return new LoginPart[size];
}
@Override
public LoginPart createFromParcel(Parcel source) {
return new LoginPart(source);
}
};
}
public类LoginPart实现可包裹{
私有令牌请求;
私人OAuths服务;
私有字符串authURL;
公共登录部分(令牌、OAuthService、字符串AuthURL){
requestoken=令牌;
s=s;
authURL=authURL;
}
公共登录部分(){
}
公共物流部分(包裹){
requestoken=parcel.readValue(getClassLoader());
s=parcel.readValue(getClassLoader());
authURL=parcel.readValue(getClassLoader());
}
公共令牌getRequestoken(){
返回请求;
}
公共无效setRequestoken(令牌requestoken){
this.requestoken=requestoken;
}
公共OAuthService getS(){
返回s;
}
公共包裹getSParcelable(){
归还(可包裹)s;
}
公共无效集(OAuths服务){
这个.s=s;
}
公共字符串getAuthURL(){
返回authURL;
}
public void setAuthURL(字符串authURL){
this.authURL=authURL;
}
公共int描述内容(){
//TODO自动生成的方法存根
返回0;
}
公共无效写入包裹(包裹目的地,内部标志){
//TODO自动生成的方法存根
dest.writeValue(requestoken);
目的书面价值;
dest.writeValue(authURL);
}
公共静态最终包裹。创建者=新创建者(){
@凌驾
public LoginPart[]新数组(整数大小){
返回新的LoginPart[size];
}
@凌驾
公共登录部件createFromParcel(地块源){
返回新的LoginPart(源);
}
};
}
为此,您的令牌类和OAuthService类应该实现Parcelable
getIntent().getExtras()代码>包含上一个活动发送的参数。您应该重新考虑如何命名变量intent2
不是Intent
而是Bundle
,所以它有点让人困惑。你有什么问题?如果它崩溃了,那么发布日志。如果问题是这样,您可以将数据从一个捆绑包添加到另一个Intent
。我编辑了问题。因为问题是相关的可分配类。如果我删除Intent,它会成功工作。所以问题与可分配类相关。因为问题是相关的可分配类。如果我删除Intent,它会成功工作。所以这个问题与可包裹类有关。你必须使用putExtra而不是putParcelable。类似于此Parcelableobject parcelableobj=新的Parcelableobject()//在Intent Intent.putExtra(“MyParcelableObject”,parcelableobj)中存储可包裹对象;当我转换为putparableable时,IDE不允许使用此示例;requestoken=parcel.readValue(getClassLoader());此part.IDE不允许并在getClassLoader()下面加下划线,否则您可以使用getClass().getClassLoader()