Android 如何使用Intent.putExtra和Parcel将对象从一个活动发送到另一个活动?

Android 如何使用Intent.putExtra和Parcel将对象从一个活动发送到另一个活动?,android,android-intent,parcelable,Android,Android Intent,Parcelable,使用以下URL 我已经做了如下的申请样本 Scrollview1.java import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Scrollview1 e

使用以下URL

我已经做了如下的申请样本

Scrollview1.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Scrollview1 extends Activity {
    static int i;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button b = (Button)findViewById(R.id.Button01);

        b.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                Intent i = new Intent(Scrollview1.this, Result.class);
                Name n = new Name();
                n.setI(20);
                n.setS1("Hello");
                n.setS2("World");
                i.putExtra("Name", n);
                startActivity(i);
            }           
        });
    }
}
//Name.java

import android.os.Parcel;
import android.os.Parcelable;

public class Name implements Parcelable{
    int i;
    String s1;
    String s2;
    public Name(){

    }
    private Name(Parcel in){
        in.readInt();
        in.readString();
    }
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }

    public String getS1() {
        return s1;
    }
    public void setS1(String s) {
        this.s1 = s;
    }
    public String getS2() {
        return s2;
    }
    public void setS2(String s) {
        this.s2 = s;
    }

    public int describeContents() {
        return 0;
    }
    public void writeToParcel(Parcel dest, int flags) {     
        dest.writeInt(i);
        dest.writeString(s1);
        dest.writeString(s2);
    }

      public static final Name.Creator<Name> CREATOR = new Name.Creator<Name>() {
            public Name createFromParcel(Parcel in) {
                return new Name(in);
            }

            public Name[] newArray(int size) {
                return new Name[size];
            }
        };  
}
但结果类I得到null。怎么了?

在:

private Name(Parcel in){
    in.readInt();
    in.readString();
}

您正在读取包裹,但没有实际将信息分配给变量。

根据
getParcelableExtra
的文档,如果未找到包裹内容,则返回null

在Result.java中试试这个

Name a = (Name)getIntent().getExtras().getParcelable("Name");
而不是您现在所做的
Name a=(Name)getIntent().getParcelableExtra(“Name”)


我希望这有帮助。告诉我它是否有用

我想你应该改变这个

private Name(Parcel in){
   i= in.readInt();
   s1 =  in.readString();
   s2 = in.readString();
}
private Name(Parcel in){
   i= in.readInt();
   s1 =  in.readString();
   s2 = in.readString();
}