Android实现数据回传

上一篇文章写了数据传递,这篇level up,来到数据回传。

一、时序图

先来看一下数据回传的一张时序图。startActivityForResult()、setResult()、onActivityResult()三者缺一不可~

1.startActivityForResult()

在数据传递中,我们使用startActivity()来打开下一个页面。在数据回传中,我们要使用startActivityForResult()来打开下一个页面,它的作用是:从A页面使用该方法跳转到B页面,当B页面销毁时,会从销毁的B页面将数据传回到A页面(注意是原来的那个A页面,不是新的A页面)。

2.setResult()

将B页面的数据回传到A页面

3.onActivityResult()

A页面接收回传的信息

二、步骤

了解三个方法后,我们开始进入数据回传的步骤。(以Login页面和Register页面为例)

1.startActivityForResult()

(1)格式

startActivityForResult(Intent intent, int requestCode);
//括号内有两个参数,第一个参数Intent表示意图对象,
第二个参数requestcode表示请求码,用于标识请求的来源。
//为何要用到请求码?
//设想一下如果我们的Login页面有多个按钮的点击事件中都要跳转到Register页面,
//那么多页面,该如何判断我们Login回收到的数据是从哪个按钮的点击事件从跳转过来的呢?
//这时候就需要用请求码来标识我们的每个跳转按钮~这样才能清楚明白请求的来源

(2)例子

//设计一个Register的点击事件
Register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//设置跳转到的Activity页面
                Intent intent = new Intent();
                intent.setClass(Login.this, Register.class);
//用startActivityForResult()开启Register页面
                startActivityForResult(intent, Register_RequestCode);
            }
        });

第一个步骤在Login页面完成√,接下来暂时让Login页面休息,来到Register页面

2.setResult()

(1)格式

setResult(int resultCode,Intent intent)
//第一个参数是返回码,用于标识返回的数据来自哪一个Activity
//第二个参数Intent用于携带数据并回传到上一个Activity

(2)例子

//还是用到了putextra()在Intent对象中存储数据
Intent intent=new Intent();
intent.putExtra("key",name.getText().toString());
//toString()不是必要的,但是如果是初学者的话建议都加上toString()
//确保数据都转化成字符型
//name.getText()是从Register页面中获得到的数据
setResult(RESULT_OK,intent);
finish();
//不要忘记用finish()销毁当前页面,这样才能回到原来的Login页面
//这里有个注意点,不要在finish前面加上页面跳转方法
//亲身经历,在做数据回传的时候,在finish前面加上了从Register跳转到Login,
//导致我尝试了很多次数据一直回传不过去,原因在于我加上了页面跳转,Register跳转之后
//的Login页面是一个新页面,没办法获取到回传的数据。
//因为这个原因卡了我好久...脑袋晕晕QAQ

到这里,Register页面的任务已经完成,回到Login页面

3.onActivityResult()

Login接收从Register回传的数据

(1)格式

onActivityResult(int requestCode,int resultCode,Intent data)

(2)例子

//不要手敲这一长串,敲个onActivityResult找到以下格式
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==Register_RequestCode){
            if(resultCode==RESULT_OK){
                String name1=data.getStringExtra("key");
                Log.v("login","传递了name"+name);//打个log看看有没有获取到数据
                Rev.setText(name1);//在Login页面中显示出获取到的数据
//Rev是绑定的控件名,是我们要显示出回收到的数据的输入框。
//所以记得要绑定!具体的在数据传递中有写
            }
        }
    }

到这就结束啦

三、关于请求码和返回码

请求码和返回码我们都可以直接在格式里面设定

startActivityForResult(intent, 1);//设定了请求码是“1”
setResult(2,intent);//设定了返回码是“2”

也可以现在前面定义

over~

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值