How to send an object from one activity to another with Intent.putExtra and Parcel?

advertisements

Using the following URL How to send an object from one Android Activity to another using Intents?

I have made sample application as follow

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];
            }
        };
}

//Result.java

import android.app.Activity;
import android.os.Bundle;

public class Result extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

      Name a = (Name)getIntent().getParcelableExtra("Name");
      System.out.println("Int : "+a.getI());
      System.out.println("String : "+a.getS1());
      System.out.println("String : "+a.getS2());
    }
}

but it is Result class I getting null. What is wrong?


In:

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

You are reading from the Parcel, but not actually assigning the information to a variable.