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);
}
}