java.io.IOException: unexpected end of stream on Connection
public static void postControl(String url, String postName, Boolean value) {
// 定義okhttp
OkHttpClient okHttpClient_post = new OkHttpClient.Builder()
.readTimeout(8, TimeUnit.SECONDS) //設置請求超時
.writeTimeout(8, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
// 定義請求體 執行okhttp
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
JSONObject json = new JSONObject();
try {
Log.d("打印Control傳入的值:", postName + "," + value);
json.put(postName, value);
} catch (JSONException e) {
e.printStackTrace();
}
//將傳入的參數,轉換成json格式
RequestBody requestBody = RequestBody.create(JSON, String.valueOf(json));
Request request = new Request.Builder()
.post(requestBody) //post請求方式
.url(url)
.build();
try {
Response response = okHttpClient_post.newCall(request).execute();
if (response.isSuccessful()) {
String result = response.body().string();
System.out.println("打印Post 返回的數據:" + result);
//解析返回值,判斷設置是否成功
if (TextUtils.isEmpty(result)) { //判斷返回數據是否爲空
Log.d("打印:判斷返回結果", "result 爲空,數據刷新");
} else {
jsonResult(result, postName);
}
} else {
throw new IOException("Unexpected code " + response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
添加
.addNetworkInterceptor(new NetInterceptor()) //添加攔截器
添加後:
// 定義okhttp
OkHttpClient okHttpClient_post = new OkHttpClient.Builder()
.addNetworkInterceptor(new NetInterceptor()) //添加攔截器
.readTimeout(8, TimeUnit.SECONDS) //設置請求超時
.writeTimeout(8, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
NetInterceptor:
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
/**
* 攔截器
*/
public class NetInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.addHeader("Connection","close").build();
return chain.proceed(request);
}
}
最後附上解析,及其get方法:
/**
* @param result 解析返回值
* @param name 協傳的 選項名
* {"success":true , "msg":"set success!"}
*/
private static void jsonResult(String result, String name) {
try {
JSONObject jsonObject = new JSONObject(result);
boolean isSuccess = jsonObject.getBoolean("success");
String msg = jsonObject.getString("msg");
System.out.println("打印出解析是否成功的Json值:" + isSuccess + "," + msg);
//如果 isSuccess ,則彈出友好提示,綁定、鎖車、設置成功
if (isSuccess) {
// 通知前臺,直接刷新下 控制列表
} else {
//通知,設置失敗
}
} catch (Exception e) {
e.printStackTrace();
}
}
get請求:
/**
* okHttp 請求獲取數據
*
* @param url 請求地址
*/
public static void getWorkInfo(String url) {
// 定義okhttp
OkHttpClient okHttpClient_get = new OkHttpClient.Builder()
.addNetworkInterceptor(new NetInterceptor()) //添加攔截器
.readTimeout(8, TimeUnit.SECONDS) //設置請求超時
.writeTimeout(8, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
// 請求體
Request request = new Request.Builder()
.get()//get請求方式
.url(url)//網址
.build();
try {
Response response = okHttpClient_get.newCall(request).execute();
if (response.isSuccessful()) {
// 打印數據
String result = response.body().string();
System.out.println("getWorkInfo的數據 :" + result);
if (TextUtils.isEmpty(result)) { //判斷返回數據是否爲空
Log.d("打印:getWorkInfo", "result 爲空");
//若爲空 通知前臺無數據返回
} else {
jsonWorkInfo(result);
}
} else {
throw new IOException("Unexpected code " + response);
}
} catch (Exception e) {
e.printStackTrace();
}
}