关于Android中的AsynHttpClient用法和注意事项
介绍:AsyncHttpClient 是一种发送http协议的异步请求的安卓框架,它和传统的HttpClient的区别在于,不用在另创建子线程,代码简洁,使用方便
而且是异步的请求,比同步请求效率高很多
jar: android-async-http-1.4.8.jar;
解决方法中Header类没有声明的情况:在build.gradle中android{}大括号内,写:useLibrary ‘org.apache.http.legacy’
之后在点Sync Now即可解决;
(如果使用后报很多的错误信息,请看下方的注意事项)
示例:
private void zhuanPinYin(String input) {
//发送请求的url,和在web开发当中的访问路径一样,8080是端口号,interview是项目名,pinyin是访问时的action或controlle
String url = "http://192.168.2.43:8080/interview/pinyin";
//实例化AsyncHttpClient对象,构建浏览器
AsyncHttpClient client = new AsyncHttpClient();
//params进行参数传递,key和getParmarmiter("")中的一致,value是传递的值
RequestParams params = new RequestParams();
params.put("abc",input);
//post为提交方式,也可以使用get方式进行提交
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
//当请求成功或状态码小于300的时候,程序就会进入到onSuccess方法
//代表请求成功,为了代码更严谨,在方法内还是要判断一下状态码是否等于200
public void onSuccess(int i, Header[] headers, byte[] bytes) {
//i是状态码,还记得你以前背过的302状态码吗,当i为200的时候
//代表请求已成功发送
//bytes数组中返回的服务器端返回的数据
String temp = new String(bytes);
Log.d("Success","成功了"+i+" "+temp);
try {
//如果服务器端返回的是json格式的数据可使用下面的方式进行取值
JSONObject object = new JSONObject(temp);
Log.d("通知:","正在转换拼音中");
//取值的方式:根据json数据的key获取到对应的value,如下面的"拼音"就是我获取json的key
pinYin = object.getString("拼音");
}catch (JSONException e){
e.printStackTrace();
}
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
Log.d("failure","失败了"+i);
}
});
}
注意!!!
在使用AsyncHttpClient时,要注意系统权限的问题噢!如果不开系统权限,会导致很多的错误信息
权限信息为:(并不是全部都要使用,但是不知道哪个有用哪个没用,还是都放进去)
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />