public class NetWorkUtils {
private static final String SERVER_INTERFACE ="http://172.16.2.135:8089/";
? ? //局域網:? http://172.16.2.135:8089
//遠程:http://58.250.30.13:8086/
//后臺協商的字段
//? ? private static final String SUCCESS_FLAG_VALUE = "1";
? ? private static final String SUCCESS_FLAG ="success";
? ? private static final String FAIL_FLAG ="message";
? ? //狀態值,暴露出去
? ? public static final String NO_NETWORK ="NULL_NETWORK";
? ? private static OkHttpClient mOkHttpClient;
? ? private static NetWorkUtils mNetWorkUtils;
? ? public static NetWorkUtils get() {
if (mNetWorkUtils ==null) {
mNetWorkUtils =new NetWorkUtils();
? ? ? ? }
return mNetWorkUtils;
? ? }
private NetWorkUtils() {
mOkHttpClient =new OkHttpClient();
? ? }
public void postAsyncHttp(final Context context, String action, Object data, Map paramsData, final int httpType, final HttpRequestCallback requestCallback) {
if (checkConnect(context)) {
requestCallback.onFailure(NO_NETWORK, httpType);
? ? ? ? ? ? return;
? ? ? ? }
mOkHttpClient.newBuilder()
.readTimeout(20000, TimeUnit.SECONDS)//設置讀取超時時間
? ? ? ? ? ? ? ? .writeTimeout(20000, TimeUnit.SECONDS)//設置寫的超時時間
? ? ? ? ? ? ? ? .connectTimeout(20000, TimeUnit.SECONDS)//設置連接超時時間
? ? ? ? ? ? ? ? .build();
? ? ? ? Request.Builder requestBuilder =new Request.Builder();
? ? ? ? requestBuilder.addHeader("Content-Type", "application/json");
? ? ? ? String url =SERVER_INTERFACE + action;
? ? ? ? if (data !=null) {
if (paramsData !=null) {
boolean init =true;
? ? ? ? ? ? ? ? for (Map.Entryentry :
paramsData.entrySet()) {
if (init) {
url +="?" +entry.getKey() +"=" +entry.getValue();
? ? ? ? ? ? ? ? ? ? ? ? init =false;
? ? ? ? ? ? ? ? ? ? }else {
url +="&" +entry.getKey() +"=" +entry.getValue();
? ? ? ? ? ? ? ? ? ? }
}
}
requestBuilder.post(RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
? ? ? ? ? ? ? ? ? ? new Gson().toJson(data)));
? ? ? ? ? ? Log.d("zc", "json:" +new Gson().toJson(data));
? ? ? ? }else if (paramsData !=null) {
FormBody.Builder bodyBuilder =new FormBody.Builder();
? ? ? ? ? ? for (Map.Entryentry :
paramsData.entrySet()) {
bodyBuilder.add(entry.getKey(), entry.getValue());
? ? ? ? ? ? }
requestBuilder.post(bodyBuilder.build());
? ? ? ? }
Log.d("zc", "url:" +url);
? ? ? ? Request request =requestBuilder
? ? ? ? ? ? ? ? .url(url)
.build();
final Call call =mOkHttpClient.newCall(request);
? ? ? ? call.enqueue(new Callback() {
@Override
? ? ? ? ? ? public void onFailure(Call call, IOException e) {
requestCallback.onFailure(e.getLocalizedMessage(), httpType);
? ? ? ? ? ? }
@Override
? ? ? ? ? ? public void onResponse(Call call, Response response)throws IOException {
setResponse(requestCallback, response.body().string(), httpType);
? ? ? ? ? ? }
});
? ? }
public void getSyncHttp(Context context, final int httpType, String url, final HttpRequestCallback requestCallback) {
if (checkConnect(context)) {
requestCallback.onFailure(NO_NETWORK, httpType);
? ? ? ? ? ? return;
? ? ? ? }
Request request =new Request
.Builder().url(url).build();
? ? ? ? Call call =mOkHttpClient.newCall(request);
? ? ? ? call.enqueue(new Callback() {
@Override
? ? ? ? ? ? public void onFailure(Call call, IOException e) {
requestCallback.onFailure(e.getLocalizedMessage(), httpType);
? ? ? ? ? ? }
@Override
? ? ? ? ? ? public void onResponse(Call call, Response response)throws IOException {
setResponse(requestCallback, response.body().string(), httpType);
? ? ? ? ? ? }
});
? ? }
//設置成功回調的數據
? ? private void setResponse(HttpRequestCallback requestCallback, String jsonStr, int httpType) {
try {
JSONObject object =new JSONObject(jsonStr);
? ? ? ? ? ? if (object.getBoolean(SUCCESS_FLAG)) {
requestCallback.onResponse(jsonStr, httpType);
? ? ? ? ? ? }else {
requestCallback.onFailure(object.getString(FAIL_FLAG), httpType);
? ? ? ? ? ? }
}catch (Exception e) {
requestCallback.onFailure(e.toString(), httpType);
? ? ? ? }
}
//檢查網絡狀態
? ? private static boolean checkConnect(Context cont) {
ConnectivityManager cm = (ConnectivityManager) cont.getSystemService(Context.CONNECTIVITY_SERVICE);
? ? ? ? NetworkInfo info =cm.getActiveNetworkInfo();
? ? ? ? return info ==null;
? ? }
}
//網絡接口
public interface HttpRequestCallback {
/**
* 獲取數據成功
*
? ? * @param request
? ? * @param type
? ? */
? ? void onResponse(String request, int type);
? ? /**
* 獲取數據失敗
*
? ? * @param exp
? ? */
? ? void onFailure(String exp, int type);
}