Android Pass Custom Object In Intent Example

This article will tell you how to pass custom type object via intent between two activities. It is not difficult, you just need to make your custom class either implement java.io.Serializable or android.os.Parcelable interface.

1. Android Pass Object Via Intent Between Activity Example Overview.

android pass custom object via intent example

There are two activity in this example. User input some info in the first activity, when he click the submit button, the input data will be passed to the target activity with intent. And the data is saved in the intent use custom type object.

Below is the example used java files. UserAccountDTO is a class that implement java.io.Serializable. And UserDepartmentDTO is custom class which implement android.os.Parcelable.

android pass custom object in intent java files

2. Main Activity.

IntentPassObjectActivity.java

package com.dev2qa.example.intent.pass_object;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.dev2qa.example.R;

public class IntentPassObjectActivity extends AppCompatActivity {

    public static final String INTENT_PARAM_KEY_USER_ACCOUNT = "INTENT_PARAM_KEY_USER_ACCOUNT";

    public static final String INTENT_PARAM_KEY_USER_DEPARTMENT = "INTENT_PARAM_KEY_USER_DEPARTMENT";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_pass_object);

        setTitle("dev2qa.com - Android Intent Pass Object Example.");

        Button submitButton = (Button)findViewById(R.id.intent_pass_object_submit_button);

        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Get user input data.
                EditText userNameEditText = (EditText)findViewById(R.id.intent_pass_object_username);
                EditText passwordEditText = (EditText)findViewById(R.id.intent_pass_object_password);
                EditText departmentEditText = (EditText)findViewById(R.id.intent_pass_object_department);
                EditText titleEditText = (EditText)findViewById(R.id.intent_pass_object_title);

                String userName = userNameEditText.getText().toString();
                String password = passwordEditText.getText().toString();
                String department = departmentEditText.getText().toString();
                String title = titleEditText.getText().toString();

                // Create user account dto.
                UserAccountDTO userAccountDto = new UserAccountDTO();
                userAccountDto.setUserName(userName);
                userAccountDto.setPassword(password);

                // Crete user department dto.
                UserDepartmentDTO userDepartmentDto = new UserDepartmentDTO();
                userDepartmentDto.setUserName(userName);
                userDepartmentDto.setDepartment(department);
                userDepartmentDto.setTitle(title);

                // Create intent.
                Intent intent = new Intent(IntentPassObjectActivity.this, IntentPassObjectTargetActivity.class);
                // Put above two dto in the intent as usual.
                intent.putExtra(INTENT_PARAM_KEY_USER_ACCOUNT, userAccountDto);
                intent.putExtra(INTENT_PARAM_KEY_USER_DEPARTMENT, userDepartmentDto);
                // Start the target activity.
                startActivity(intent);
            }
        });

    }
}

3. Target Activity.

IntentPassObjectTargetActivity.java

package com.dev2qa.example.intent.pass_object;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import com.dev2qa.example.R;

public class IntentPassObjectTargetActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_pass_object_target);

        setTitle("dev2qa.com - This Is The Target Activity.");

        Intent intent = getIntent();

        /* Call intent getSerializableExtra method to get object 
           that implement java.io.Serializable interface. */
        Object userAccountObj = intent.getSerializableExtra(IntentPassObjectActivity.INTENT_PARAM_KEY_USER_ACCOUNT);
        UserAccountDTO userAccountDto = (UserAccountDTO)userAccountObj;

        /* Call intent getParcelableExtra method to get object 
            that implement android.os.Parcelable interface. */
        Object userDepartmentObj = intent.getParcelableExtra(IntentPassObjectActivity.INTENT_PARAM_KEY_USER_DEPARTMENT);
        UserDepartmentDTO userDepartmentDto = (UserDepartmentDTO)userDepartmentObj;

        StringBuffer userInfoBuf = new StringBuffer();
        userInfoBuf.append("UserName : ");
        userInfoBuf.append(userAccountDto.getUserName());

        userInfoBuf.append("\r\nPassword : ");
        userInfoBuf.append(userAccountDto.getPassword());

        userInfoBuf.append("\r\nDepartment : ");
        userInfoBuf.append(userDepartmentDto.getDepartment());

        userInfoBuf.append("\r\nTitle : ");
        userInfoBuf.append(userDepartmentDto.getTitle());

        TextView targetTextView = (TextView)findViewById(R.id.intent_pass_object_target_text_view);
        targetTextView.setText(userInfoBuf.toString());
    }
}

4. UserAccountDTO.java

This class implement java.io.Serializable interface.

package com.dev2qa.example.intent.pass_object;

import java.io.Serializable;

/**
 * Created by Jerry on 3/22/2018.
 */

public class UserAccountDTO implements Serializable {

    private String userName;

    private String password;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

5. UserDepartmentDTO.java

This class implement android.os.Parcelable interface. It must override some abstract methods and it must has a android.os.Parcelable.Creator type instance variable, the variable name must be CREATOR, and CREATOR must be declared as public static final.

package com.dev2qa.example.intent.pass_object;

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

/**
 * Created by Jerry on 3/22/2018.
 */

public class UserDepartmentDTO implements Parcelable {

    private String userName;

    private String department;

    private String title;

    @Override
    public int describeContents() {
        return 0;
    }

    /* This method is used to write instance variable to Parcel. */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userName);
        dest.writeString(department);
        dest.writeString(title);
    }

    /* Must create this static class variable to make this class Parcelable. */
    public static final Creator<UserDepartmentDTO> CREATOR = new Creator<UserDepartmentDTO>()
    {
        @Override
        public UserDepartmentDTO createFromParcel(Parcel source) {
            UserDepartmentDTO ret = new UserDepartmentDTO();

            // The read order should be same as write order in writeToParcel method.
            ret.userName = source.readString();
            ret.department = source.readString();
            ret.title = source.readString();

            return ret;
        }

        @Override
        public UserDepartmentDTO[] newArray(int size) {
            return new UserDepartmentDTO[size];
        }
    };

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

6. Main Activity Layout Xml File.

It use TableLayout to implement user input interface.

READ :   Android Pick Multiple Image From Gallery Example

activity_intent_pass_object.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="35dp">

        <!-- User name row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="User Name:"
                android:gravity="right"/>
            <EditText
                android:id="@+id/intent_pass_object_username"
                android:ems="10" />
        </TableRow>

        <!-- Password row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Password:"
                android:gravity="right"/>
            <EditText
                android:id="@+id/intent_pass_object_password"
                android:inputType="textPassword"
                android:ems="10"/>

        </TableRow>

        <!-- Department row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Department:"
                android:gravity="right"/>
            <EditText
                android:id="@+id/intent_pass_object_department"
                android:ems="10"/>
        </TableRow>

        <!-- Title row. -->
        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Title:"
                android:gravity="right"/>
            <EditText
                android:id="@+id/intent_pass_object_title"
                android:ems="10"/>
        </TableRow>

    </TableLayout>

    <Button
        android:id="@+id/intent_pass_object_submit_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="90dp"
        android:text="Submit"/>

</LinearLayout>

7. Target Activity Layout Xml File.

activity_intent_pass_object_target.xml

<TextView
    android:id="@+id/intent_pass_object_target_text_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="35dp"
    android:textSize="20dp"/>
(Visited 547 times, 1 visits today)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.