java http请求框架-okhttp3

okHttp3

最近做一个项目有个很坑的地方需要在服务端调另一个服务端的接口上传照片,具体原因就不详说了,反正很坑,不想用java自带的httpconnection,也不想要httpclient,代码太长了,看着有点烦,然后网上找了找,然后问了一个做Android的同学,推荐我用okhttps框架,并且发了使用的代码给我看,乍一看代码相当简洁且逻辑清晰,简直不要太好,但是在自己用起来遇到了一些问题,浪费了我好多时间。不过最后感谢群里面的大佬的热心帮助,度过了难关。这里记录一下使用方法,万一以后会用到呢(不过我已经发誓再也不玩这么骚的套路了 ̄□ ̄||)

这次是post上传照片还包括参数,先上代码吧

public static void sendPhotoRequest(String url,String openid,String fileName) throws IOException, InterruptedException {
       MediaType mediaType = MediaType.parse("img/jpg");
       final OkHttpClient okHttpClient= new OkHttpClient();
       File file = new File(fileName);
       RequestBody requestBody = new MultipartBody.Builder()
               .setType(MultipartBody.FORM)
               .addFormDataPart("fileimage",file.getName(),RequestBody.create(mediaType,file))
               .addFormDataPart("openid",openid)
               .build();
       final Request request = new Request.Builder()
               .url(url)
               .post(requestBody)
               .build();
        //异步方法
       okHttpClient.newCall(request).enqueue(new Callback() {
           @Override
           public void onFailure(Call call, IOException e) {
               System.out.println("err");
           }

           @Override
           public void onResponse(Call call, Response response) throws IOException {
               System.out.println(response.body().string());
               //强制关闭该线程,如果没有这行代码,会阻塞,即使接收到相应程序还不会终止
               okHttpClient.dispatcher().executorService().shutdown();
           }
       });
       //同步方法
//        Response response=okHttpClient.newCall(request).execute();
//        if(response.isSuccessful()){
//            System.out.println(response.body().string());
//        }else{
//          System.err.println("err"+response.body().string());
//        }

   }

最开始直接copy网上的源码,调用的异步方法(毕竟是在Android上跑的),然后我接收到响应后程序还是没有终止,
到处找原因,后来才知道这是异步的方法,还有一个同步的方法execute()。
后来有个大佬给了我这个代码okHttpClient.dispatcher().executorService().shutdown();
接收到消息后强制关闭。挺好的。
最后再说下这个框架挺棒的,代码简洁,使用起来超级方便。

你可能感兴趣的:(其他)