实例介绍
【实例简介】
【实例截图】
【核心代码】
package com.allen.http.framework;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
/**
* start http request from this,it extends AsyncTask
*
*
*/
public class HttpAsyncTaskManager implements Request {
private Context context;
private static final String TAG = HttpAsyncTaskManager.class
.getSimpleName();
public HttpAsyncTaskManager(Context context) {
this.context = context;
}
/**
* get request
*
* @param url
* @param handler
* see the abstract class {@link TaskHandler},you can use the
* subclass eg. {@link StringTaskHandler} and so on}
*/
public void request(String url, TaskHandler handler) {
if (context != null) {
synchronized (this) {
new HttpTask(context, url, 0, null, handler).execute("");
}
}
}
/**
* post request
*
* @param url
* @param params
* url parameters,if not use null
* @param handler
* see the abstract class {@link TaskHandler},you can use the
* subclass eg. {@link StringTaskHandler} and so on}
*/
public void request(String url, Map<String, String> params,
TaskHandler handler) {
if (context != null) {
synchronized (this) {
new HttpTask(context, url, 1, params, handler).execute("");
}
}
}
/** task */
private static class HttpTask extends
AsyncTask<String, Integer, InputStream> {
Context context;
String url;
/** 0 is get,1 is post */
int type = 0;
TaskHandler handler;
Map<String, String> params;
public HttpTask(Context context, String url, int type,
Map<String, String> params, TaskHandler handler) {
this.context = context;
this.url = url;
this.type = type;
this.handler = handler;
this.params = params;
}
@Override
protected void onPreExecute() {
if (!IOUtils.networkIsAvailable(context)) {// network is break
handler.onNetError();
}
}
@Override
protected InputStream doInBackground(String... param) {
// TODO Auto-generated method stub
InputStream in = null;
if (IOUtils.networkIsAvailable(context)) {// network is well
if (type == 0) {// get
HttpEntity entity = null;
HttpGet get = new HttpGet(url);
try {
HttpResponse res = HttpFactory.execute(context, get);
final int statusCode = res.getStatusLine()
.getStatusCode();
entity = res.getEntity();
if (statusCode == HttpStatus.SC_OK && entity != null) {
in = entity.getContent();
return in;
} else {
get.abort();
}
} catch (Exception e) {
get.abort();
Log.e(TAG, "____get___" e.toString() "_____");
}
} else {// post
final HttpPost post = new HttpPost(url);
HttpEntity entity = null;
try {
//add the url parameters
List<NameValuePair> pair = new ArrayList<NameValuePair>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params
.entrySet()) {
pair.add(new BasicNameValuePair(entry.getKey(),
entry.getValue()));
}
}
post.setEntity(new UrlEncodedFormEntity(pair, "UTF-8"));
final HttpResponse response = HttpFactory.execute(
context, post);
final int statusCode = response.getStatusLine()
.getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
entity = response.getEntity();
if (entity != null) {
in = entity.getContent();
return in;
}
} else {
post.abort();
}
} catch (Exception e) {
post.abort();
Log.e(TAG, "____post___" e.toString() "_____");
}
}
}
return in;
}
protected void onPostExecute(InputStream result) {
if (result == null) {
handler.onFail();
} else {
handler.onSuccess(handler.parseResult(result));
}
IOUtils.closeStream(result);
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论