开发者

Android Activity进行数据传输的方法

开发者 https://www.devze.com 2025-09-24 11:16 出处:网络 作者: 三三是该溜子
目录一:Activity之间的数据传输1:MainActivity做处理(1)putExtra(2)逻辑梳理2:SecondActivity做处理3:效果二:Activity之间的数据回传1:MainActivity做处理(1)startActivityForResult(2)onActivityResu
目录
  • 一:Activity之间的数据传输
    • 1:MainActivity做处理
      • (1)putExtra
      • (2)逻辑梳理
    • 2:SecondActivity做处理
      • 3:效果
      • 二:Activity之间的数据回传
        • 1:MainActivity做处理
          • (1)startActivityForResult
          • (2)onActivityResult
        • 2:SecondActivity做处理
          • (1)setResult
        • 3:逻辑梳理
          • 4:finish问题延伸
          • 三:Activity数据回传的新方式
            • 1:.launch
              • 2:registerForActivityResult
                • (1)new ActivityResultContracts.StartActivityForResult()
                • (2)new ActivityResultCallback()
                • (3)o.getResultCode()
                • (4)o.getdata()
              • 3:结果

              android 应用开发中,Activity之间的数据传递是常见的需求。核心方法包括使用In编程tent、Bundle、使用全局变量存储、SharedPreferences以及通过数据库进行数据传递。其中,使用Intent和Bundle进行数据传递是最常见且高效的方法。Intent不仅可以启动不同的Activity,还能够携带各种数据。通过putExtra()方法添加数据,在新的Activity中通过getIntent()方法接收数据,实现不同Activity间的数据传递。

              一:Activity之间的数据传输

              问题:不同的Activity之间怎么进行数据传输呢?

              比如第一个页面中有一些字符串数据之类的要通过数据传输,传递给第二个页面进行显示的

              1:MainActivity做处理

              在定义一个按钮,和一个文本输入框

              <Button
                      android:id="@+id/btn_second3"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:text="携带数据,跳转到Second页面"
                      app:layout_constraintStart_toStartOf="parent"
                      jsapp:layout_constraintTop_toBottomOf="@id/btn_second2"/>
                  <EditText
                      android:id="@+id/et_data"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:hint="请输入一些数据"
                      app:layout_constraintStart_toStartOf="parent"
                      app:layout_constraintTop_toBottomOf="@id/btn_second3"/>
                      findViewById(R.id.btn_second3).setOnClickListener(this);
                      etData = findViewById(R.id.et_data);
              
              

              继续在onClick方法中写一个else if()

              else if (id == R.id.btn_second3) {
                          Intent intent = new Intent(this, SecondActiviwww.devze.comty.class);
                          String string = etData.getText().toString();
                          if(string != null && string.length() > 0){
                              intent.putExtra("key_data",string);               
                          }
                          startActivity(intent);
                      }

              (1)putExtra

              Extra翻译为额外;它的作用是在通过 Intent 启动另一个组件(如 Activity)时,携带一些额外的数据

              有点Cookie和Session会话的味道了,记住这里的key值一定要匹配

              (2)逻辑梳理

              从输入框中获取string字符串

              2:SecondActivity做处理

              XML布局自己定义一个TextView,此处略

              Intent intent = getIntent();
                      String keyData = intent.getStringExtra("key_data");
                      TextView textView = findViewById(R.id.text_view);
                      if(keyData != null && keyData.length() > 0){
                          textView.setText(keyData);
                      }

              这边呢接收数据,并让string显示在页面上

              看一下两者联系

              Android Activity进行数据传输的方法

              3:效果

              效果就这样,第二个页面(右图)接受到了,就显示出来

              Android Activity进行数据传输的方法

              二:Activity之间的数据回传

              问题:MainActivity怎么接收SecondActivity回传的数据

              1:MainActivity做处理

              (1)startActivitywww.devze.comForResult

              <Button
                      android:id="@+id/btn_second4"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:text="跳转到Second页面,等待Second返回数据"
                      app:layout_constraintStart_toStartOf="parent"
                      app:layout_constraintTop_toBottomOf="@id/et_data"/>
              findViewById(R.id.btn_second4).setOnClickListener(this);
              else if (id == R.id.btn_second4) {
                          //老方式
                          startActivityForResult(new Intent(this, SecondActivity.class),9);
                      }
              • startActivityForResult方法在安卓API30以后已经过时了,但是很多商业中也会用到这个玩意,也得学bro
                • 参数一:Intent 对象,“要启动哪个页面”,也可以在 Intent 里用 putExtra 携带数据传给目标页面。
                • 参数二:requestCode(请求码),给这次跳转打个 “标记 9”,等目标页面返回数据时,能通过这个标记识别 “这是 btn_start_second4 按钮跳转的返回”。

              (2)onActivityResult

              @Override
                  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
                      super.onActivityResult(requestCode, resultCode, data);
                      if (requestCode == 9 && resultCode == 8){
                          int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);
                          String keyComeBackString = data.getStringExtra("key_comeBackString");
                          Log.i(TAG, "onActivityResult: num = " + keyComeBackNum);
                          Log.i(TAG, "onActivityResult: string = " + keyComeBackString);
                          etData.setText(keyComeBackNum + keyComeBackString);
                      }
                  }
              • requestCode:“请求码”,自己定义的一个整数标记,这里是9; 区分 “是哪一次启动 Activity 的请求”
                • 比如:一个页面有多个按钮,都用 startActivityForResult 跳转到不同页面,靠 requestCode 就知道 “这次返回的数据,对应之前哪个按钮的跳转” 。
              • resultCode:“结果码”,是目标 Activity 返回的状态标记
              • data:一个 Intent 对象,是目标 Activity 返回的 “数据载体”; 记得判空
                • getInExtra取到的值如android果为空,默认为0

              2:SecondActivity做处理

              在SecondActivity的xml中在定义一个Button控件

              <Button
                      android:id="@+id/btn_back"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:text="往MainActivity回传数据"
                      app:layout_constraintTop_toTopOf="parent"
                      app:layout_constraintStart_toStartOf="parent"/>

              (1)setResult

              findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              int comeBack = 798;
                              String string = "surprise ma da faker";
                              Intent backIntent = new Intent();
                              backIntent.putExtra("key_comeBackNum",comeBack);
                              backIntent.putExtra("key_comeBackString",string);
                              setResult(8,backIntent);
                              finish();
                          }
                      });
              • setResult(8,backIntent),这里我们的结果码就是8

              3:逻辑梳理

              • 启动时
                • 通过 startActivityForResult(intent, 9) 启动 SecondActivity,这里的 9 就是 requestCode(请求码)。
              • 目标页面返回时
                • SecondActivity 中,需要通过 setResult(8, data) 来设置返回结果:
                • 第一个参数 8 就是 resultCode(结果码,自定义的标记)
                • 第二个参数 dataIntent 对象,通过 putExtra 存入数据(key_comeBackNumkey_comeBackString
              • 接收返回时:回到当前页面的 onActivityResult 方法:
                • 通过 requestCode == 9 判断:“这是之前用请求码 9 启动的页面返回的结果”
                • 通过 resultCode == 8 判断:“目标页面返回了结果码 8 的状态”
                • data 中取出携带的 key_comeBackNumkey_comeBackString,并更新到 etData 输入框中

              4:finish问题延伸

              提问:在第二个页面做了一些数据后,不马上finish,而是手动关闭,这个时候回传的数据还能收到吗

              最后一句代码finish删掉;finish的作用就是,点击btn_bakc2这个按钮后activity_second这个页面就退出了

              Android Activity进行数据传输的方法

              这里我们点击返回按钮,同样MainActivity能接收到传回来的数据,并不受影响

              Android Activity进行数据传输的方法

              Android Activity进行数据传输的方法

              三:Activity数据回传的新方式

              1:.launch

              用于启动目标 Activity 并等待其返回结果的核心方法。它的作用类似于传统的 startActivityForResult()

              创建点击事情的准备工作

              Android Activity进行数据传输的方法

              Android Activity进行数据传输的方法

              //跳转到第二个页面,等待回传数据
              		else if (id == R.id.btn_second5) {
                          activityResultLancher.launch(new Intent(this, SecondActivity.class));
                      }

              2:registerForActivityResult

              可以理解一个接收Activity结果的注册器,负责 “结果回调”,能在当前 Activity中优雅接收、处理返回的数据。

              是传统的startActivityForResult + onActivityResult 机制的平替

              private ActivityResultLauncher<Intent> activityResultLancher = registerForActivityResult(
                          new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
                              @Override
                              public void onActivityResult(ActivityResult o) {
                                  int resultCode = o.getResultCode();//返回的结果码
                                  Intent data = o.getData();//返回的数据
                                  if (resultCode == 8) {
                                      int keyComeBackNum = data.getIntExtra("key_comeBackNum", 0);
                                      String keyComeBackString = data.getStringExtra("key_comeBackString");
                                      Log.i(TAG, "onActivityResult: key_comeBackNum = " + keyComeBackNum);
                                      Log.i(TAG, "onActivityResult: key_comeBackString" + keyComeBackString);
                                      etData.setText("接受到的数据是" + keyComeBackString + keyComeBackNum);
                                  }
                              }
                          }
                  );

              (1)new ActivityResultContracts.StartActivityForResult()

              作用:启动一个 Activity 并获取其返回结果

              ActivityResultContracts 是一个包含多种预定义合约(Contract)的工具类,StartActivityForResult 是其中一个静态内部类

              (2)new ActivityResultCallback()

              Android Activity进行数据传输的方法

              作用:回调接口,当被启动的 Activity 关闭并返回结果时触发

              重写onActivityResult方法,((20250808114147-zw40xjr “前面我们已经使用过这个方法,但是两者形参不同,”))ActivityResult中包括结果码(resultCode)返回的数据(data)

              (3)o.getResultCode()

              (4)o.getdata()

              3:结果

              Android Activity进行数据传输的方法

              到此这篇关于Android Activity 如何进行数据传输的文章就介绍到这了,更多相关Android Activity 数据传输内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

              0

              精彩评论

              暂无评论...
              验证码 换一张
              取 消

              关注公众号