5.AsyncHttp、post
2016-02-13 17:27
471 查看
httpClient
[/code]AsyncHttp
[/code]由于不需要每个页面访问网络都去写这一段代码,抽取:
回调接口:
[/code]HMChatManager
[/code]访问的的时候
[/code]
// 网络访问请求
new Thread(new Runnable() {
@Override
public void run() {
String url = "http://192.168.1.101:8080/ChatServer/register";
// 创建 httpClient
HttpClient client = new DefaultHttpClient();
// 创建 post请求
HttpPost post = new HttpPost(url);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
// 配置请求头
// post.addHeader("", "");
// 配置请求参数
pairs.add(new BasicNameValuePair("account", account));
pairs.add(new BasicNameValuePair("password", password));
try {
post.setEntity(new UrlEncodedFormEntity(pairs));
HttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// 拿到网络的返回结果
final String result = EntityUtils.toString(response
.OgetEntity());
Log.d("result : ", "" + result);
// 需要在主线线程中做UI操作
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
doResult(result);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
[/code]AsyncHttp
// 创建 访问端
AsyncHttpClient client = new AsyncHttpClient();
// 接口地址
String url = "http://192.168.1.101:8080/ChatServer/register";
//
RequestParams params = new RequestParams();
params.put("account", account);
params.put("password", password);
// 调用post方法访问网络
client.post(context, url, params, new TextHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
Log.d("success", responseString + "");
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseString);
JsonObject root = element.getAsJsonObject();
JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
boolean flag = flagJson.getAsBoolean();
if (flag) {
JsonObject dataObject = root.getAsJsonObject("data");
if (dataObject != null) {
Account user = new Gson().fromJson(dataObject,
Account.class);
Log.d("", user.toString());
}
} else {
JsonPrimitive errorCodeJson = root
.getAsJsonPrimitive("errorCode");
JsonPrimitive errorStringJson = root
.getAsJsonPrimitive("errorString");
Log.d("", errorCodeJson.getAsInt() + " : "
+ errorStringJson.getAsString());
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
Log.d("error", responseString + " : " + throwable.getMessage());
}
});
[/code]由于不需要每个页面访问网络都去写这一段代码,抽取:
回调接口:
public abstract class ObjectCallback<T> {
private final Class<T> clazz;
@SuppressWarnings("unchecked")
public ObjectCallback() {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];//获取泛型
}
public Class<T> getDataClass() {
return clazz;
}
public abstract void onSuccess(T data);
public abstract void onFailure(int errorCode, String errorString);
}
[/code]HMChatManager
public class HMChatManager {
private static HMChatManager instance;
private Context context;
public static HMChatManager getInstance(Context context) {
if (instance == null) {
synchronized (HMChatManager.class) {
if (instance == null) {
instance = new HMChatManager(context);
}
}
}
return instance;
}
private HMChatManager(Context context) {
this.context = context;
}
@SuppressWarnings("rawtypes")
public HttpFuture sendRequest(String url, final ObjectCallback callback) {
return sendRequest(url, null, callback);
}
@SuppressWarnings("rawtypes")
public HttpFuture sendRequest(String url, Map<String, String> headers,
Map<String, String> paramters, final ObjectCallback callback) {
// 创建 访问端
AsyncHttpClient client = new AsyncHttpClient();
// 请求消息头
if (headers != null) {
for (Map.Entry<String, String> me : headers.entrySet()) {
client.addHeader(me.getKey(), me.getValue());
}
}
// 请求参数
RequestParams params = new RequestParams();
// params.put("account", account);
// params.put("password", password);
if (paramters != null) {
for (Map.Entry<String, String> me : paramters.entrySet()) {
params.put(me.getKey(), me.getValue());
}
}
// 调用post方法访问网络
RequestHandle handle = client.post(context, url, params,
new TextHttpResponseHandler() {
@SuppressWarnings("unchecked")
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
Log.d("success", responseString + "");
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseString);
JsonObject root = element.getAsJsonObject();
JsonPrimitive flagJson = root
.getAsJsonPrimitive("flag");
boolean flag = flagJson.getAsBoolean();
if (flag) {
JsonObject dataObject = root
.getAsJsonObject("data");
if (dataObject != null) {
if (callback != null) {
@SuppressWarnings("unchecked")
Object obj = new Gson().fromJson(
dataObject, callback.getDataClass());
callback.onSuccess(obj);
}
}
} else {
JsonPrimitive errorCodeJson = root
.getAsJsonPrimitive("errorCode");
JsonPrimitive errorStringJson = root
.getAsJsonPrimitive("errorString");
Log.d("", errorCodeJson.getAsInt() + " : "
+ errorStringJson.getAsString());
if (callback != null) {
callback.onFailure(errorCodeJson.getAsInt(),
errorStringJson.getAsString());
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
Log.d("error",
responseString + " : " + throwable.getMessage());
if (callback != null) {
callback.onFailure(HMError.ERROR_SERVER, "服务器连接问题");
}
}
});
return new HttpFuture(handle);
}
[/code]访问的的时候
String url = "http://192.168.1.101:8080/ChatServer/register";
Map<String, String> paramters = new HashMap<String, String>();
paramters.put("account", account);
paramters.put("password", password);
future = HMChatManager.getInstance(getActivity()).sendRequest(url,
paramters, new ObjectCallback<Account>() {
@Override
public void onSuccess(Account data) {
Log.d("onSuccess", data.toString());
// 数据的存储
AccountDao dao = new AccountDao(getActivity());
data.setCurrent(true);
Account localAccount = dao.getByAccount(data
.getAccount());
if (localAccount != null) {
dao.updateAccount(data);
} else {
dao.addAccount(data);
}
// 页面跳转
((LoginActivity) getActivity()).go2FillInfo();
}
@Override
public void onFailure(int errorCode, String errorString) {
Log.d("onFailure", errorCode + " : " + errorString);
switch (errorCode) {
case HMError.ERROR_CLIENT_NET:
Log.d(TAG, "客户端网络异常");
ToastUtil.show(getActivity(), "客户端网络异常");
break;
case HMError.ERROR_SERVER:
Log.d(TAG, "服务器异常");
ToastUtil.show(getActivity(), "服务器异常");
break;
case HMError.Register.ACCOUNT_EXIST:
Log.d(TAG, "用户已经存在");
ToastUtil.show(getActivity(), "用户已经存在");
break;
default:
break;
}
}
});
[/code]
附件列表
相关文章推荐
- HTTP响应头和请求头信息对照表
- iOS开发之网络数据解析(一)--JSON解析简介
- VMware12安装Centos7 64位 解决无可用网络问题
- HttpClient和HttpURLConnection的区别
- 关于vmnet1~vmnet8(虚拟机下的linxu网络连接方式)
- Unity3D之http多线程异步资源下载
- http协议笔记
- socket编程 -- 基于TCP协议的C/S通信模型及实现
- 1834: [ZJOI2010]network 网络扩容
- 02环信集成SDK基础功能 - 网络掉线自动重连
- android下载网络数据的几种方法
- Android开发笔记(六十二)HTTP数据格式的解析
- 【翻译自mos文章】OGG replicat 进程使用的 TCP 端口
- Android Studio 更新 Android 6.0 之后无法使用 org.apache.http 包的问题
- 基于httpClient3的多线程版本,使用spring管理生命周期
- 深度学习方法(六):神经网络weight参数怎么初始化
- 深度学习方法(六):神经网络weight参数怎么初始化
- 深度学习方法(六):神经网络weight参数怎么初始化
- Android Studio API23以后HttpClient
- 网络基础知识