Android studio:如何从一个activity传输数据到另一个activity

如何从一个activity传输数据到另一个activity


最近学习了Android studio的使用和开发Android程序,初学的同时我也来分享一下学到的一些东西。第一次用csdn写博客,还不太熟练。


我们都知道Android程序是由activity组成的,每个activity转跳到另一个activity的时候都可以进行数据的传送。下面我就来说一下如何实现数据的传输。
进行activity转跳的时候我们用的是Intent来进行转跳,代码如下
当然我们要先给一个按钮实现一个点击事件,才能进行转跳。
 package com.example.study1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

        
        findViewById(R.id.bt_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent inte = new Intent(MainActivity.this,Main2Activity.class);
                
                startActivity(inte);
            }
        });
    }
}
然后我们再进行数据的传输,用的是putExtra,代码:
补充之后就成这样了
package com.example.study1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

        findViewById(R.id.bt_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent inte = new Intent(MainActivity.this,Main2Activity.class);
                inte.putExtra("date","你好 世界");
                startActivity(inte);
            }
        });
    }
}
以上是第一个class文件的转跳数据传输
有了传输肯定也有接收了,代码:
第二个activity的class文件来接收传输的数据 这里就不放完整的class文件代码了
我们要接收一个字符串所以用getStringExtra来接收
 		TextView tv_2;
        Intent i = getIntent();

        tv_2 = findViewById(R.id.tv_2);

        tv_2.setText(i.getStringExtra("date"));
接收到的字符串,运行显示

在这里插入图片描述


上面知道了怎么传输普通的字符串数据,下面我要说一下怎么传一个数据包,传输复杂一点的数据,代码如下:

findViewById(R.id.bt_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent inte = new Intent(MainActivity.this,Main2Activity.class);
                Bundle bu = new Bundle();//先实例化一个Bundle
                bu.putString("name","安卓");//写入数据
                bu.putInt("age",12);
                inte.putExtra("date",bu);//传输Bundle数据包
                startActivity(inte);
            }
        });
接收数据包的代码:
 TextView tv_2;
        Intent i = getIntent();
        Bundle b = i.getBundleExtra("date");//接收数据包文件

        tv_2 = findViewById(R.id.tv_2);

        tv_2.setText(String.format("name = %s,age = %d, name1 = %s",b.getString("name"),b.getInt("age"),b.getString("name1","不存在")));
getString到了不存在的数据name,你可以进行赋给它初始值。

下面我说一下对象的传输

首先我们建立一个对象,这个对象要继承Android给的Parcelable接口。
[Parcelable接口的介绍和使用](请自行百度)
代码如下`
package com.example.study1;

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


public class user implements Parcelable {

    private String name;
    private int age;

    public user(String name, int age){
        this.age = age;
        this.name = name;
    }

    protected user(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    public static final Creator<user> CREATOR = new Creator<user>() {
        @Override
        public user createFromParcel(Parcel in) {
            return new user(in.readString(),in.readInt());
        }

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

    public int getAge(){
        return age;
    }
    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName());
        dest.writeInt(getAge());
    }
}
对于这个接口我也第一次使用不太熟练,有不明白看看上面小标语。	
以下是两个activity的部分代码:
findViewById(R.id.bt_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent inte = new Intent(MainActivity.this,Main2Activity.class);
                inte.putExtra("date",new user("安卓",12));
                startActivity(inte);
            }
        });
 TextView tv_2 ;
        Intent i = getIntent();

        tv_2 = findViewById(R.id.tv_2);

        user us = i.getParcelableExtra("date");
        tv_2.setText(String.format("user info(name = %s,age = %d)",us.getName(),us.getAge()));
使用方式和上面的基本相同。

在这里插入图片描述

我希望能通过书写博客来提高自己的能力,记录学习的过程。

原创文章 9 获赞 8 访问量 664

猜你喜欢

转载自blog.csdn.net/qq_43625843/article/details/104684081