-
运行到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();