什么是AsyncHttp
是github上的一个插件,用于获取网络数据,功能与HttpUrlConnection功能类似
本篇文章是对github文档中的信息进行翻译和补充。
我将从这里进行翻译:Make a Static Http Client:创建一个静态的方法(可以实现代码的复用),在之前需要导入依赖包,可以看我圈出来的之前的代码,相信你可以看懂的。
下面我们就是用AsyncHttp来实现访问网络数据:
效果展现
代码实现:
1.创建一个类,自定义一个public static修饰的方法
//创建一个公共类
public class HttpUtil {
//将一个网址的不变部分先进行定义,一个传URL时只需要传变的部分
private static final String basicUrl = "http://103.244.59.105:8014/paopaoserver/";
//创建AsyncHttpClient对象
private static AsyncHttpClient client = new AsyncHttpClient();
//创建方法进行申请访问网络,同时在最后调用回调方法
public static void get(String url, RequestParams params, AsyncHttpResponseHandler asyncHttpResponseHandler){
client.get(getAbsulateUrl(url),params,asyncHttpResponseHandler);
}
//此方法用于将网址的不变部分+URL变的部分
private static String getAbsulateUrl(String relativeUrl){
return basicUrl+relativeUrl;
}
}
2.在需要访问网络是,调用get方法,实现回调方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button showBtn;
private String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bangID();
}
private void bangID() {
showBtn = findViewById(R.id.main_show_btn);
showBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_show_btn:
//创建AsyncHttpClient对象
AsyncHttpClient client = new AsyncHttpClient();
//调用get方法
client.get("https://www.csdn.net/", new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Toast.makeText(MainActivity.this, "访问网络失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
//成功
//Log.e(TAG, "onSuccess: "+responseString );
Toast.makeText(MainActivity.this, responseString, Toast.LENGTH_SHORT).show();
}
});
//另一种启动网络的方式
//创建RequestParams对象
// RequestParams requestParams = new RequestParams();
//将参数和值以键值对的形式放入requestParams中
// requestParams.put("params","{\"classify_id\":70,\"page\":1,\"page_count\":2}");
// //启动
// HttpUtil.get("categorylist",requestParams, new TextHttpResponseHandler() {
// @Override
// public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
// Toast.makeText(MainActivity.this, "failture", Toast.LENGTH_SHORT).show();
// }
//
// @Override
// public void onSuccess(int statusCode, Header[] headers, String responseString) {
// Log.e(TAG, "onSuccess: "+responseString );
// Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show();
//
// }
// });
break;
default:
}
}
}
补充:可以看到,我们在发送请求时,使用的是get方法,参数是以键值对的形式发送的,那么下面我将讲解如何使用post方法传递json数据;
1.在我们创建静态方法类中添加post()方法
//创建一个公共类
public class HttpUtil {
//将一个网址的不变部分先进行定义,一个传URL时只需要传变的部分
private static final String basicUrl = "http://103.244.59.105:8014/paopaoserver/";
//创建AsyncHttpClient对象
private static AsyncHttpClient client = new AsyncHttpClient();
//创建方法进行申请访问网络,同时在最后调用回调方法
public static void get(String url, RequestParams params, AsyncHttpResponseHandler asyncHttpResponseHandler){
client.get(getAbsulateUrl(url),params,asyncHttpResponseHandler);
}
//创建post方法
public static void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler) {
client.post(context,url,entity,contentType,responseHandler);
}
//此方法用于将网址的不变部分+URL变的部分
private static String getAbsulateUrl(String relativeUrl){
return basicUrl+relativeUrl;
}
}
2.在需要申请网络时,调用post方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button showBtn;
private String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bangID();
}
private void bangID() {
showBtn = findViewById(R.id.main_show_btn);
showBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_show_btn:
Intent intent = getIntent();
String basicUrl = intent.getStringExtra("basicUrl");
//创建JSONObject数组
final JSONObject[] jsonObject = {new JSONObject()};
try {
//通过给JSONObject数组的对象赋值,来传递json数据,可以添加多个
jsonObject[0].put("Blower",1);
} catch (JSONException e) {
e.printStackTrace();
}
//创建ByteArrayEntity对象
ByteArrayEntity entity = null;
try {
entity = new ByteArrayEntity(jsonObject[0].toString().getBytes("UTF-8"));
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
HttpUtil.post(MainActivity.this, basicUrl + "control", entity, "application/json", new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
}
});
break;
default:
}
}
}