传递简单数据
完整版:
总结:
利用Intent的Extra部分来存储我们想要传递的数据,可以传送String , int, long, char等一些基础类型,对复杂的对象就无能为力了
简单数据指的是字符串,整数,浮点数等各种简单数据类型的数据
安卓允许向启动的活动传递数据,也可以接收活动返回的数据
启动时候应该向活动传递一个Intent对象,各种数据通过封装在Intent对象内传递到另一个活动中
封装:putExtra(name,value)
方法将指定的数据封装到Intent对象
中,
name是表示数据名称的字符串,value是要传递的简单类型的值
获取数据:获取Intent对象封装的简单数据,可调用各种getXXXExtra()
方法
getCharExtra(String name,char defaultValue) | 从Intent对象中获得指定name为char类型数据 |
---|---|
getFloatExtra(String name,float defaultValue) | 从Intent对象中获得指定name为float类型数据 |
getFloatArrayExtra(String name) | 从Intent对象中获得指定name为float类型数组 |
getIntArrayExtra(String name) | 从Intent对象中获得指定name为int类型数组 |
getIntExtra(String name,int defaultValue) | 从Intent对象中获得指定name为int类型数据 |
getStringArrayExtra(String name) | 从Intent对象中获得指定name为String类型数组 |
getStringExtra(String name) | 从Intent对象中获得指定name为String类型数据 |
只要是数组除了String类型外,其他的就是两个参数
不是数组就只有一个获得name的参数
各种getXXXExtra()
方法中的defaultValue表示默认值,
如果Intent对象中没有指定name的数据,则将默认值作为方法返回值
可用hasExtra(String name)
方法判断Intent对象里面是否含有指定name数据
案例
运行结果:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击获得接收的值"
android:textSize="20dp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.transfersimpledata;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建并实现一个监听器
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//监听器要做的事情
//因为Intent是消息传递机制,所以创建一个Intent来传递通信,具体的见自己总结的Intent博客
Intent i=new Intent(MainActivity.this,ReceiveData.class);//MainActivity和ReceiveData连接起来 允许他们之间传递数据
i.putExtra("殊","123455"); //注意这个殊只是用来获取这个数据时候的标志
//用putExtra把内容传送到另一个Activity,名字是殊,值是123455
startActivity(i);//启动第二个activity并把i传递过去
}
});
}
}
activity_receive.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ReceiveData">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text"/>
</RelativeLayout>
ReceiveData.java
package com.example.transfersimpledata;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class ReceiveData extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_data);
TextView tv=findViewById(R.id.text);
Intent intent=getIntent();//因为Mian2Activity是通过intend来启动的,所以通过getIntend来获取与这个Activity相关的数据
String s =intent.getStringExtra("殊"); //因为MainActivity里通过putExtra传递时名字是殊,所以这里用殊来
tv.setText("我接收的密码是:\n密码=" +s);
}
}
注意采坑:
坑一:创建了两个Intent,只能创建一个Intent
坑二:
注意看,因为都是展示到tv这个TextView上面,所以会出现覆盖问题
可以多创建几个TextView分别展示或者把这三个接收整合作为一个接收数据来展示