HttpConnectionUtils 支持get post put delete请求 图片请求
/**
* HTTP connection helper
* @author
*
*/
public class HttpConnectionUtils implements Runnable {
private static final String TAG = HttpConnectionUtils.class.getSimpleName();
public static final int DID_START = 0;
public static final int DID_ERROR = 1;
public static final int DID_SUCCEED = 2;
private static final int GET = 0;
private static final int POST = 1;
private static final int PUT = 2;
private static final int DELETE = 3;
private static final int BITMAP = 4;
private String url;
private int method;
private Handler handler;
private List<NameValuePair> data;
private HttpClient httpClient;
public HttpConnectionUtils() {
this(new Handler());
}
public HttpConnectionUtils(Handler _handler) {
handler = _handler;
}
public void create(int method, String url, List<NameValuePair> data) {
Log.d(TAG, "method:"+method+" ,url:"+url+" ,data:"+data);
this.method = method;
this.url = url;
this.data = data;
ConnectionManager.getInstance().push(this);
}
public void get(String url) {
create(GET, url, null);
}
public void post(String url, List<NameValuePair> data) {
create(POST, url, data);
}
public void put(String url, List<NameValuePair> data) {
create(PUT, url, data);
}
public void delete(String url) {
create(DELETE, url, null);
}
public void bitmap(String url) {
create(BITMAP, url, null);
}
@Override
public void run() {
handler.sendMessage(Message.obtain(handler, HttpConnectionUtils.DID_START));
httpClient = new DefaultHttpClient();
HttpConnectionParams
.setConnectionTimeout(httpClient.getParams(), 6000);
try {
HttpResponse response = null;
switch (method) {
case GET:
response = httpClient.execute(new HttpGet(url));
break;
case POST:
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(data,HTTP.UTF_8));
response = httpClient.execute(httpPost);
break;
case PUT:
HttpPut httpPut = new HttpPut(url);
httpPut.setEntity(new UrlEncodedFormEntity(data,HTTP.UTF_8));
response = httpClient.execute(httpPut);
break;
case DELETE:
response = httpClient.execute(new HttpDelete(url));
break;
case BITMAP:
response = httpClient.execute(new HttpGet(url));
processBitmapEntity(response.getEntity());
break;
}
if (method < BITMAP)
processEntity(response.getEntity());
} catch (Exception e) {
handler.sendMessage(Message.obtain(handler,
HttpConnectionUtils.DID_ERROR, e));
}
ConnectionManager.getInstance().didComplete(this);
}
private void processEntity(HttpEntity entity) throws IllegalStateException,
IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(entity
.getContent()));
String line, result = "";
while ((line = br.readLine()) != null)
result += line;
Message message = Message.obtain(handler, DID_SUCCEED, result);
handler.sendMessage(message);
}
private void processBitmapEntity(HttpEntity entity) throws IOException {
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
Bitmap bm = BitmapFactory.decodeStream(bufHttpEntity.getContent());
handler.sendMessage(Message.obtain(handler, DID_SUCCEED, bm));
}
ConnectionManager
public class ConnectionManager {
public static final int MAX_CONNECTIONS = 5;
private ArrayList<Runnable> active = new ArrayList<Runnable>();
private ArrayList<Runnable> queue = new ArrayList<Runnable>();
private static ConnectionManager instance;
public static ConnectionManager getInstance() {
if (instance == null)
instance = new ConnectionManager();
return instance;
}
public void push(Runnable runnable) {
queue.add(runnable);
if (active.size() < MAX_CONNECTIONS)
startNext();
}
private void startNext() {
if (!queue.isEmpty()) {
Runnable next = queue.get(0);
queue.remove(0);
active.add(next);
Thread thread = new Thread(next);
thread.start();
}
}
public void didComplete(Runnable runnable) {
active.remove(runnable);
startNext();
}
}
封装的Handler HttpHandler 也可以自己处理
public class HttpHandler extends Handler {
private Context context;
private ProgressDialog progressDialog;
public HttpHandler(Context context) {
this.context = context;
}
protected void start() {
progressDialog = ProgressDialog.show(context,
"Please Wait...", "processing...", true);
}
protected void succeed(JSONObject jObject) {
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
}
protected void failed(JSONObject jObject) {
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
}
protected void otherHandleMessage(Message message){
}
public void handleMessage(Message message) {
switch (message.what) {
case HttpConnectionUtils.DID_START: //connection start
Log.d(context.getClass().getSimpleName(),
"http connection start...");
start();
break;
case HttpConnectionUtils.DID_SUCCEED: //connection success
progressDialog.dismiss();
String response = (String) message.obj;
Log.d(context.getClass().getSimpleName(), "http connection return."
+ response);
try {
JSONObject jObject = new JSONObject(response == null ? ""
: response.trim());
if ("true".equals(jObject.getString("success"))) { //operate success
Toast.makeText(context, "operate succeed:"+jObject.getString("msg"),Toast.LENGTH_SHORT).show();
succeed(jObject);
} else {
Toast.makeText(context, "operate fialed:"+jObject.getString("msg"),Toast.LENGTH_LONG).show();
failed(jObject);
}
} catch (JSONException e1) {
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
e1.printStackTrace();
Toast.makeText(context, "Response data is not json data",
Toast.LENGTH_LONG).show();
}
break;
case HttpConnectionUtils.DID_ERROR: //connection error
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
Exception e = (Exception) message.obj;
e.printStackTrace();
Log.e(context.getClass().getSimpleName(), "connection fail."
+ e.getMessage());
Toast.makeText(context, "connection fail,please check connection!",
Toast.LENGTH_LONG).show();
break;
}
otherHandleMessage(message);
}
}
我这儿server端返回的数据都是json格式。必须包括{success:"true",msg:"xxx",other:xxx} 操作成功success为true.
调用的代码:
private Handler handler = new HttpHandler(LoginActivity.this) {
@Override
protected void succeed(JSONObject jObject) { //自己处理成功后的操作
super.succeed(jObject);
} //也可以在这重写start() failed()方法
};
private void login() {
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", loginEmail.getText().toString()));
params.add(new BasicNameValuePair("password", loginPassword.getText().toString()));
String urlString = HttpConnectionUtils.getUrlFromResources(LoginActivity.this, R.string.login_url);
new HttpConnectionUtils(handler).post(urlString, params);
}
分享到:
相关推荐
封装android的http请求
【Android】Android 封装 Http 请求工具(csdn)————程序
本demo主要对异步请求封装 可用作基本项目框架来使用 网络请求等等小细节已经ok 如有需要请进一步更改 1)封装HttpClient 2)由于用到线程池,可以进行多任务网络请求操作 3)没有网络的时候进行网络状态检查 4)对...
Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库可以大大的简化操作,它是基于...
这是我的博客Android框架 之网络请求框架系列文章第二弹的HttpUrilConnection封装的源码
这个工程已经完整的封装了http的各种请求(get post)还可以下载图片,并且已经为大家实现了网络请求的等待界面。实现分跨程通信,只要重写部分方法就可以了。大家看看吧,文采不好。自己看了就知道。
提供一个Android封装的http请求实用工具类,在做ANDROID网络开发中这个经常要用到,大家可以参考下面的工具类修改成自己的工具
对Http网络请求进行封装的网络请求模块,使用策略模式实现动态切换网络引擎的封装。默认使用OkHttp3作为网络引擎,使用中可通过implements网络引擎接口来实现切换网络引擎功能。
它使用简单,配置灵活,可以快速实现网络请求。目前支持:get请求,post请求,多文件上传,文件下载,图片加载,上传下载进度监听,设置自定义拦截器,cookie管理,https证书设置,自定义Retrofit接口,多种Callback...
安卓开发为了方便管理或者后续维护扩展,将网络模块独立出来,从而也提高开发效率,利用到多线程,线程池实现异步请求。
Android开发HTTP使用okgo请求数据的实现demo,实现方法——引入依赖再进行自定义封装,封装了传参和解析返回的json数据,使用非常方便。
本框架 是对 RXJAVA2 Retrofit RxBus OkHttp 的架构的封装 达成目标:链式调用,简单明了 1.支持 主流的Http 请求 2.支持 多文件上传 监听进度 3.支持 大文件下载 监听进度
okhttp wrapper for Android Http. Gradle: compile 'im.wangchao:mhttp:1.7.1' annotationProcessor 'im.wangchao:mhttp-compiler:0.3.3' PROGUARD ProGuard rules now ship inside of the library and are ...
Android网络请求的统一封装和调用.集成了android-async-http, volley, okhttp3等网络请求框架.可直接切换底层库. 1 简介 架构分层 总共分为三层: 网络请求调用层. app统一调用该层接口和这层提供的回调,该层可以...
android实现登陆和注册的前后台框架,利用http的post和get进行请求,请求方式已经封装完善.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
本文并不针对HTTP协议的具体内容,仅探讨android开发中使用HTTP协议访问网络的两种方式——HttpURLConnection和HttpClient 因为需要访问网络,需在AndroidManifest.xml中添加如下权限 <uses android:name=...
最简单的okhttp封装,CallBack方法执行在UI线程。支持get请求,post请求,支持文件上传和下载。
对http的get、post、put 方法进行封装,置成lib直接调用
主要介绍了Android AndBase框架使用封装好的函数完成Http请求的相关资料,感兴趣的小伙伴们可以参考一下