java http請求框架-okhttp3
阿新 • • 發佈:2018-12-21
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();
接收到訊息後強制關閉。挺好的。
最後再說下這個框架挺棒的,程式碼簡潔,使用起來超級方便。