package cn.edu.njupt.allgo.util;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import cn.edu.njupt.allgo.activity.LogOffACTIVITY;
import cn.edu.njupt.allgo.application.MyDeclare;
import cn.edu.njupt.allgo.logic.RefreshInterFace;
public class NetUtil {
private Map<String,String> myParams;
private RequestParams params;
private String uri;
private RefreshInterFace refresh;
private NetCallBack callback;
private HttpUtils http;
private MyDeclare declare;
private Context context;
private JSONObject jsonObject;
private String TAG = "Http";
/**
* 初始化
* @param uri
* @param refresh
* @param context
* @param callback
*/
public NetUtil(String uri, RefreshInterFace refresh, Context context,NetCallBack callback) {
super();
this.uri = uri;
this.refresh = refresh;
this.context = context;
this.callback = callback;
declare =(MyDeclare)context.getApplicationContext();
myParams= new HashMap<String,String>();
params = new RequestParams();
}
/**
* 发送post请求
*/
public void post(){
for (Map.Entry<String, String> entry : this.myParams.entrySet()) {
params.addBodyParameter(entry.getKey(), entry.getValue());
}
if(isNetworkConnected(context)){
send(HttpRequest.HttpMethod.POST,params);
}else{
refresh.refresh("没有联网", -1);
}
}
/**
* 发送get请求
*/
public void get(){
for (Map.Entry<String, String> entry : this.myParams.entrySet()) {
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
if(isNetworkConnected(context)){
send(HttpRequest.HttpMethod.GET,params);
}else{
refresh.refresh("没有联网", -1);
}
}
private void send(HttpRequest.HttpMethod arg0,RequestParams params){
SharedPreferences sharedPref = context.getSharedPreferences("appdata",Context.MODE_PRIVATE);
params.addHeader("Cookie","JSESSIONID="+sharedPref.getString("SessionId", ""));
http = new HttpUtils();
http.configCurrentHttpCacheExpiry(1000 * 1);
http.send(arg0,
declare.getHost_url() + uri,
params,
new RequestCallBack<String>() {
@Override
public void onStart() {
Log.i(TAG ,"onStart" ) ;
}
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.i(TAG, "Http==>"+responseInfo.result);
try {
jsonObject = new JSONObject(responseInfo.result);
if(jsonObject.getString("response").equals("error")){
refresh.refresh(jsonObject.getJSONObject("error").getString("text"), -1);
}else if(jsonObject.getString("response").equals("notlogin")){
Toast.makeText(context, "登录过期,请重新登录", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context,LogOffACTIVITY.class);
intent.putExtra("action", 1);
context.startActivity(intent);
}else {
callback.getResult(jsonObject);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(HttpException error, String msg) {
Log.i(TAG ,"error==>" + msg ) ;
refresh.refresh(msg, -1);
}
});
}
/**
* 添加params
* @param key
* @param value
*/
public void add(String key,String value){
myParams.put(key, value);
}
/**
* 设置请求位置
* @param uri
*/
public void setURI(String uri){
this.uri = uri;
}
/**
* 得到params
* @return
*/
public RequestParams getParams(){
return params;
}
/**
* 添加文件
* @param key
* @param file
*/
public void addFile(String key, File file){
params.addBodyParameter(key, file);
}
/**
* 添加输入流
* @param key
* @param stream
* @param length
*/
public void addStream(String key , InputStream stream , long length){
params.addBodyParameter(key, stream, length);
}
/**
* 得到HttpUtils
* @return
*/
public HttpUtils getHttp(){
return http;
}
public static abstract class NetCallBack{
public NetCallBack(){
}
public abstract void getResult(JSONObject jsonObject);
/*public <T>Object getEntity(String tag,Class<T> vo){
Object result = null;
try {
result = JSON.parseObject(jsonObject.getString(tag) , vo);
} catch (JSONException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return result;
}*/
}
/**
* 监测联网状态
* @param context
* @return
*/
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
}