ndroid中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作。

今天要介绍的是一个在Android上同样强大的网络请求库android-async-http(官方网址:https://loopj.com/android-async-http/ )

其主要特征如下:

1.处理异步Http请求,并通过匿名内部类处理回调结果
2.Http请求均位于非UI线程,不会阻塞UI操作
3.通过线程池处理并发请求
4.处理文件上传、下载

android-async-http实现下载

添加依赖:

dependencies {    compile 'com.loopj.android:android-async-http:1.4.9'  }  

导入http包:

import com.loopj.android.http.*;

之后我推荐用官方网站上推荐的那个方法,回省很多工作量:

建立一个静态的Http客户端:在这个例子中,我们将使用静态访问器创建一个http客户端类,以便与Twitter的API进行通信。

import com.loopj.android.http.*;/** * Created by Administrator on 2018/4/10/010. */public class HttpUtil {    private static final String BAse_url = "http://192.168.1.105:8890/type/jason/action/";    private static AsyncHttpClient client = new AsyncHttpClient();    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {        client.get(getAbsoluteUrl(url), params, responseHandler);    }    public static void Post(android.content.Context context, java.lang.String url, cz.msebera.android.httpclient.HttpEntity entity, java.lang.String contentType, ResponseHandlerInterface responseHandler) {        client.post(context,getAbsoluteUrl(url), entity, contentType,responseHandler);    }    private static String getAbsoluteUrl(String url) {        return BAse_url + url;    }}

这样就可以很容易地在代码中使用api:

  RequestParams requestParams = new RequestParams();                requestParams.put("username", "admin");                HttpUtil.get("getSensor", requestParams, new TextHttpResponseHandler() {                    @Override                    public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {                    }                    @Override                    public void onSuccess(int statusCode, Header[] headers, String responseString) {                        Toast.makeText(MainActivity.this, responseString, Toast.LENGTH_SHORT).show();                        Log.e("dqwqwfsdgsdg", responseString + "...");                    }                });

AsyncHttpClient进行Json的Post请求

 JSONObject jsonObject = new JSONObject();                try {                    jsonObject.put("Buzzer", 1);                } catch (JSONException e) {                    e.printStackTrace();                }                ByteArrayEntity entity = null;                try {                    entity = new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8"));                    entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));                } catch (UnsupportedEncodingException e) {                    e.printStackTrace();                }                HttpUtil.Post(mContext, "control", entity, "application/json", new JsonHttpResponseHandler() {                    @Override                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {                        super.onSuccess(statusCode, headers, response);                        Log.e("rs", response.toString());                    }                    @Override                    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {                        super.onFailure(statusCode, headers, throwable, errorResponse);                    }                });

里面的 HttpUtil是上面我写的一个静态的Http客户端。

也可直接创建一个新AsyncHttpClient实例并发出请求::

AsyncHttpClient client = new AsyncHttpClient();client.get("https://www.google.com", new AsyncHttpResponseHandler() {    @Override    public void onStart() {        // called before request is started    }    @Override    public void onSuccess(int statusCode, Header[] headers, byte[] response) {        // called when response HTTP status is "200 OK"    }    @Override    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {        // called when response HTTP status is "4XX" (eg. 401, 403, 404)    }    @Override    public void onRetry(int retryNo) {        // called when request is retried    }});

更多相关文章

  1. android使用AIDL跨进程通信(IPC)
  2. 树莓派与Android客户端进行socket通信
  3. 第五章 网络 之 Android网络知识&框架(二)
  4. java做服务器,android做客户端,实现数据传输
  5. android retrofit2.0框架的使用介绍
  6. Android中关于Volley的使用(三)认识Volley的架构
  7. Android—网络编程
  8. android使用HttpURLConnection上传文件同时提交参数
  9. Android,一个函数实现上传文件(单个,多文件)

随机推荐

  1. 使用sencha cmd创建android应用
  2. Android:使用OkHttp解析Json遇到的坑
  3. android 音效处理 (2)
  4. [android]在上下文菜单的选中事件中获取
  5. android SharedPreferences
  6. Android最全面试题库(转)
  7. Android 开发中的倒计时
  8. Android中使Dialog显示时背景不变暗
  9. Android出现java.lang.RuntimeException:
  10. Android UI系列 - 布局 - 目录