Android下如何使用OKHttp发送请求和处理响应

        APP经常会向服务器(后端)发送http请求,但是因为Android自带的http库太难用了,所以大部分的时候都是去使用集成库,OKHttp就还行,记录一下我开发时的过程。

导入

在build.gradle中导入OKHttp

implementation 'com.squareup.okhttp3:okhttp:3.12.0'

测试

        在发送请求的时候通常要测试后端给你的接口。如果开发规范的话一般会有接口文档,里面一般包含请求的链接名、属性、类型等。根据文档测试接口(没有文档的话就得跟后端对接一下了)使用Postman测试接口。

Postman:https://www.postman.com/


流程

请求大体分为三种类型:params、body

params

以这个请求为例 

//简易的进度条
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("加载中");

      new Thread(new Runnable() {
          @Override
         public void run() {
                Log.d("userMessage",userId+" "+passwd);
            try {
                    //在其中加入参数
                    FormBody.Builder params = new FormBody.Builder();
                    params.add("id",userId);
                    params.add("password",passwd);
              
                    //创建http客户端
                   OkHttpClient client = new OkHttpClient();
                   Request request = new Request.Builder()
                             .url("http://192.168.164.94:8080/toLogin")
                             .post(params.build())
                             .build();
                   Response response = client.newCall(request).execute();
                    
//这个方法可以获得响应体中的信息,也就是服务器的响应信息
//需要注意的是response.body()这个方法只能用一次,第二次用的时候就被销毁了,这个请求就会结束。所以必须用一个参数接收,方便后续使用。
                   String responseBody = response.body().string();


//在后面处理响应
                          
                  
                    }catch(Exception e){

                    e.printStackTrace();
                    progressDialog.dismiss();
                    handler.post(new Runnable() {
                         @Override
                        public void run() {
            Toast.makeText(getApplicationContext(),"网络请求失败,请检查网        
                                         络!",Toast.LENGTH_SHORT).show();
                                   
                                }
                            });

                    }
                }).start();
            }

body

以这个为例

 new Thread(new Runnable() {
              @Override
              public void run() {

                      try {
    //这个很麻烦,因为你要把前端获取的属性拼接成json的string。"的使用要特别注意,很容易出错,写的时候要注意哪些要加\"哪些不要\"

                      String json = "{\n" +
                         "    \"id\":"+ id +",\n" +
                         "    \"name\":\""+ name +"\",\n" +
                         "    \"subject\":\"" +  subject  + "\",\n" +
                         "    \"sclass\":\"" + sclass  + "\",\n" +
                        "    \"posttime\":\""+ postTime.getTime() + "\",\n" +
                        "    \"creattime\":\""+ creatTime + "\"\n"+
                                            "}";

                                    Log.d("json",json);

            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                   .url("http://192.168.164.94:8080/signin")                         
                   .post(RequestBody.create(MediaType.parse("application/json"),json))
                   .build();

                Response response = client.newCall(request).execute();

           
              
                 if ( response.body() != null) {

                     //依然是保存数据
                   String responseDate = response.body().string();
                   
                   JSONArray jsonData = new JSONArray(responseDate);
    
                   userList = JSON.parseArray(responseDate, User.class);

                   progressDialog.dismiss();
                                Toast.makeText(appCompatActivity.getApplicationContext(),"请求成功",Toast.LENGTH_SHORT).show();

                            }
           }else {
                   progressDialog.dismiss();
                   handler.post(new Runnable() {

                         @Override
                         public void run() {
                                                Toast.makeText(getApplicationContext(),"签到失败!请重试",Toast.LENGTH_SHORT).show();
                                                homeText.setText("签到失败!请重试");
                                            }
                                        });
                                    }

                                }catch (Exception e){
                                    e.printStackTrace();
                                    progressDialog.dismiss();
                                    handler.post(new Runnable() {
                                        @Override
                                        public void run() {
                                            Toast.makeText(getApplicationContext(),"网络连接失败!请重试",Toast.LENGTH_SHORT).show();
                                            homeText.setText("签到失败!请重试");
                                            Log.d("签到","签到失败");
                                        }
                                    });

                                }

                            }
                        }).start();

 

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值