修改个人信息—关于Okhttp的异步请求

首先,先看界面需求
斜体样式在这里插入图片描述
在进入该界面之前就应该获取到数据,所以需要使用okhttp框架的异步请求
直接上代码

 OkHttpClient okHttpClient=new OkHttpClient();
                        // String json = bowlingJson("id", "2019");
                        RequestBody body=new FormBody.Builder().add("id","2019")
                                .build();
                        Request request = new Request.Builder()
                                .url(url)
                                .post(body)
                                .build();

                        Call call=okHttpClient.newCall(request);
                        okHttpClient.newCall(request).enqueue(new Callback() {
                            @Override
                            public void onFailure(Call call, IOException e) {
                                Log.e("获得的身份", "失败");

                            }

                            @Override
                            public void onResponse(Call call, Response response) throws IOException {
                                try {
                                    String data = response.body().string();//转化成string

                                    Gson gson=new Gson();
                                    UserBean a=new UserBean();
                                    a = gson.fromJson(data,UserBean.class);
                                    Log.e("获得", a.getId());
                                    EventBusUtil.postSticky(new UserEvent(a,MyApplication.getContext()));
                                    startActivity(new Intent(MyApplication.getContext(),ImformatiionActivity.class));

                                }
                                catch (Exception e){
                                    e.printStackTrace();
                                }

                            }
                        });

上面代码是在点击事件中的。可以看出,前三步都是一样的,都是依次获得OKHttpClient,Requestbody还有Request。
接下来在于Call,不同于同步的excute()方法,这个时候调用的是enqueue()方法。
需要注意的是,最后onResponse()方法是发生在子线程当中,因此不可以进行UI的更新。
我获得数据过后是使用了EventBus来对事件进行处理。

接下来说一下将数据传输到下一个Activity,使用EventBUS

从上面的代码可以看出,新建了一个UserEvent这样的一个类

public class UserEvent extends Event {
    public UserBean userBean;

    public UserEvent(UserBean address1,Object source) {
        super(source);
        this.userBean=address1;
    }
}

目的就是传输一个类的数据出去,最后如何取出来呢。接下来的两段代码都是在另一个Activity中添加的,
就是跳转到的界面

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onEvent(UserEvent response) {
        search_getaddress.setText(response.userBean.getUsername());
   
  
    }

这里根据自己具体的类来提取数据。
最后别忘了注册与反注册。

  @Override
    protected void onStart() {
        super.onStart();
        EventBusUtil.register(this);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBusUtil.unregister(this);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值