package com.partynetwork.dataprovider.json; import java.io.File; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.entity.StringEntity; import android.content.Context; import android.os.AsyncTask; import android.os.Looper; import android.util.DisplayMetrics; import com.google.gson.Gson; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseStream; import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; import com.lidroid.xutils.http.client.multipart.MultipartEntity; import com.lidroid.xutils.http.client.multipart.content.FileBody; import com.partynetwork.dataprovider.DataProvider.AysTrigger; import com.partynetwork.dataprovider.DataProvider.IJsonResultListener; import com.partynetwork.dataprovider.json.struct.FileRequest; import com.partynetwork.dataprovider.json.struct.DefaultResponse; import com.partynetwork.dataprovider.util.AppConst; import com.partynetwork.dataprovider.util.BitmapUtil; import com.partynetwork.dataprovider.util.FileUtil; import com.partynetwork.dataprovider.util.L; import com.partynetwork.dataprovider.util.MediaFile; import com.partynetwork.dataprovider.util.SDCardFileUtils; import com.partynetwork.dataprovider.util.Util; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.app.api.URLs; public class JsonNetwork extends AsyncTask<CommonRequest, Integer, NetworkEntity> { private static final int DE_HttpNetTimeOut = 60000; // 连接超时限制 private Context mContext; private IJsonResultListener mListener; private AysTrigger mTrigger; // 网络请求的对象 private HttpUtils httpUtils; public JsonNetwork(Context paramContext, IJsonResultListener paramListener) { this.mContext = paramContext; this.mListener = paramListener; init(); } private void init() { httpUtils = new HttpUtils(); httpUtils.configTimeout(DE_HttpNetTimeOut); httpUtils.configResponseTextCharset("UTF-8"); } public void setTrigger(AysTrigger paramTrigger) { this.mTrigger = paramTrigger; } /** * @param args * @throws Exception * @throws UnsupportedEncodingException * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalAccessException */ public CommonResponse JasonPostUrl(CommonRequest paramRequest) throws Exception { CommonResponse commonResponse = null; if (Util.isNetworkOk(mContext)) { // 用于文件发送的临时存放目录 List<String> tempPathList = new ArrayList<String>(); // 请求处理对象 RequestParams requestParams = new RequestParams(); // json请求处理对象 JsonRequest jsonRequest = new JsonRequest(); // 根据请求生成请求的json字符串 String requestString = jsonRequest.Request(paramRequest); if (paramRequest instanceof FileRequest) { MultipartEntity reqEntity = new MultipartEntity(); FileRequest fileRequest = (FileRequest) paramRequest; String[] file = fileRequest.getFilePath(); for (int i = 0; i < file.length; i++) { // 原始路径 String fileStr = file[i]; // 临时路径 String tempPath = ""; if (fileStr != null && !fileStr.equals("")) { DisplayMetrics dm = new DisplayMetrics(); dm = AppContext.getInstance().getResources() .getDisplayMetrics(); if (MediaFile.isImageFileType(fileStr)) { tempPath = BitmapUtil.getThumbUploadPath(fileStr, dm.widthPixels, dm.heightPixels, i); tempPathList.add(tempPath); } FileBody bin = new FileBody(new File(tempPath)); reqEntity.addPart("file" + i, bin);// file1为请求后台的File } } requestParams.setBodyEntity(reqEntity); } else { // 根据字符串生成请求体 try { HttpEntity bodyEntity = new StringEntity(requestString, "UTF-8"); // 添加请求的实体 requestParams.setBodyEntity(bodyEntity); } catch (UnsupportedEncodingException e) { } } // 发起请求,并获取返回的流 String responseString = ""; try { L.i("请求:"+URLs.URL_API_HOST + paramRequest._requestAction+requestParams.toString()); ResponseStream stream = httpUtils.sendSync(HttpMethod.POST, URLs.URL_API_HOST + paramRequest._requestAction, requestParams); // 获取返回流的字符内容 responseString = stream.readString(); L.i("返回:"+responseString); } catch (HttpException e) { responseString = "{\"result\":0,\"description\":\"通信异常\",\"details\":\"\"}"; } // json返回处理对象 JsonResponse jsonResponse = new JsonResponse(); // 根据获取返回的对象 CommonResponse response = null; try { Gson gson = new Gson(); response = gson.fromJson(responseString, DefaultResponse.class); } catch (Exception e) { } if (response != null && response.result == 1) { // 删除临时图片文件夹下的图片 if (tempPathList != null && tempPathList.size() > 0) { for (String str : tempPathList) { FileUtil.deleteTempFile(str); } } if (new File(AppConst.TEMP_PATH).exists()) { SDCardFileUtils .cleanDirectory(new File(AppConst.TEMP_PATH)); } response = jsonResponse.Response(paramRequest, responseString); } return response; } else { // 网络连接失败 Looper.prepare(); Util.showMsg(mContext, "网络异常"); Looper.loop(); } return commonResponse; } @Override protected NetworkEntity doInBackground(CommonRequest... params) { CommonRequest commonRequest = params[0]; if (null == commonRequest) { return null; } try { NetworkEntity entity = new NetworkEntity(); CommonResponse response = JasonPostUrl(commonRequest); entity.setRequest(commonRequest); entity.setResponse(response); return entity; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(NetworkEntity result) { if (null != mListener && null != result && result.getResponse() != null) { if (JsonResponse.RESULT_FAILED == result.getResponse().result) { if (result.getResponse().getDescription() != null && result.getResponse().getDescription() .equals("密匙不正确")) { } mListener.onResultFail(result.getResponse().getDescription()); } else if (JsonResponse.RESULT_SUCCESS == result.getResponse().result) { mListener.onResultSuccess(result); } if (null != mTrigger) { mTrigger.onAsyed(); } } else if (result == null) { mListener.onResultFail("通信异常"); } super.onPostExecute(result); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } }