OKhttp獲取response時遇到的坑


  • 運行到response.body().string()一步時拋異常,java.lang.IllegalStateException: closed;或者是在

  • 我們在調試的時候喜歡Log一下看看數據正不正常,我在使用HttpURLConnection  或者 HttpClient 獲取Response時都是先Log看看然后再傳輸給其他函數去解析,沒有出現這樣的問題;

   但是在使用OKhttp時就不正常了,因為調用了一次response.body().string(),那么這個流就已經被關閉了。所以想要Log,又要解析的時候,解決的辦法是暫存一下這個數據:

   String tempResponse =  response.body().string();然后使用這個暫存的數據tempResponse 

        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10,TimeUnit.SECONDS).build();
                MediaType mediaType = MediaType.parse("application/octet-stream");
//                MediaType mediaType = MediaType.parse("Content-Disposition: form-data; name=\"imgUploader\"; filename=\"logs_0.csv\"\n"+"mimetype:application/octet-stream");
                String fileName = "12715689.mp4";
                RequestBody fileBody = RequestBody.create(mediaType,new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/"+fileName));
                RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
                        .addPart(Headers.of("Content-Disposition","form-data; name=\"imgUploader\"; filename="+fileName),fileBody).build();
                HashMap<String,String> hashMap = new HashMap<>();
                hashMap.put("content-type","text/html; charset=utf-8;");

                hashMap.put("user-agent","Android");

                Headers headers = Headers.of(hashMap);

                Request request = new Request.Builder().headers(headers).post(requestBody).url("http://192.168.11.102:2000/api/Upload/").build();
                okhttp3.Call call = okHttpClient.newCall(request);


                call.enqueue(new okhttp3.Callback() {
                    @Override
                    public void onFailure(okhttp3.Call call, IOException e) {
                        Log.i(TAG,"Throwable:"+e.toString());
                    }

                    @Override
                    public void onResponse(okhttp3.Call call, final okhttp3.Response response) throws IOException {
                        final String response1 = response.body().string();
                        Log.i(TAG,"response:"+response1);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                    Toast.makeText(getApplicationContext(),response1,Toast.LENGTH_SHORT).show();

                            }
                        });
                    }
                });

            }
        }).start();

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM