Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Java 在同一活动中使用parcelable和intent_Java_Android_Android Intent_Android Activity_Parcelable - Fatal编程技术网

Java 在同一活动中使用parcelable和intent

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=

我在同一个活动中使用了2个意图。其中一个用于获取输入的Firstname、Lastname和Id。另一个意图用于向另一个活动发送数据。 但是当我使用像这样的意图时,代码不起作用。 我能用这样的意图吗

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