如何从一个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()));
使用方式和上面的基本相同。
我希望能通过书写博客来提高自己的能力,记录学习的过程。