一、AsyncHttpClient的优点
1.android-async-http 开源框架可以轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单。
2.AsyncHttpClient 作为 android-async-http 框架的一个核心应用类,使用简单,可以处理文本、二进制等各种格式的 web 资源。
二、AsyncHttpClient的使用方法
我们单独写这个AsyncHttpClient对大多人来说会有困难,所以我们可以到Githap网站上去搜索android-async-http来进行学习和使用
1.首先要在build.gradle里导一个数据包
compile 'com.loopj.android:android-async-http:1.4.9'
2.使用静态访问器创建一个http客户端类
public class InfoWeb {
public static final String Base_url="http://192.168.1.101: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);
}
private static String getAbsoluteUrl(String relateUrl) {
return Base_url+relateUrl;
}
public static void post(Context mContext, String url, HttpEntity entity,String contentType,AsyncHttpResponseHandler responseHandler){
client.post(mContext,url,entity,contentType,responseHandler);
}
}
注意点:我们要根据自己的需要来设定BASE_URL ,不可盲目照搬
3.接下来就是在主体类里填充数据了,来进行相应的获取数据和控制的操作
基础操作:
public class WebActivity extends AppCompatActivity implements View.OnClickListener {
private Button infowebBtn;
private Button contralBtn;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
infowebBtn = findViewById(R.id.info_web_btn);
contralBtn = findViewById(R.id.contral_btn);
infowebBtn.setOnClickListener(this);
contralBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
获取数据
case R.id.info_web_btn:
RequestParams params = new RequestParams();
params.put("username", "admin");
InfoWeb.get("getSensor", params, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Toast.makeText(WebActivity.this, "fail", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Toast.makeText(WebActivity.this, responseString, Toast.LENGTH_SHORT).show();
//Log.e("WebActivity",responseString);
}
});
break;
控制
case R.id.contral_btn:
InfoWeb infoWeb = new InfoWeb();
String url = infoWeb.Base_url;
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("Buzzer", 1);
jsonObject.put("Roadlamp", 1);
jsonObject.put("Blower", 1);
jsonObject.put("WaterPump", 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();
}
RequestParams params1 = new RequestParams();
params1.put("username", "");
InfoWeb.post(mContext, url + "control", entity, "application/json", new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
// Toast.makeText(WebActivity.this, "failed", Toast.LENGTH_SHORT).show();
Log.e("WebActivity", "failed*********************");
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Toast.makeText(WebActivity.this, responseString, Toast.LENGTH_SHORT).show();
//Log.e("WebActivity",responseString+"************************");
}
});
break;
注意点:控制操作比获取数据操作有个json解析 要多加注意
数据包的地址
有需要的朋友可以自行去GitHub官网上搜索https://github.com/loopj/android-async-http
笔芯!