HttpUtils步骤很简单,不过需要注意几个细节。
一。步骤:
1.导入xUtils包,
2.得到HttpUtils实例,
3.调用send()或者download()进行网络请求操作,
4.取消请求。
二。注意:
1.当我们得到HttpUtils实例直接调用方法时,可能会出现错误,造成这个问题的原因是,你的API编译器是23的,而在android 6.0(API23)中,取消掉了HttpClient,导致无法请求,如果是这种情况,解决办法有两个:
1.1.查看官方文档,在build.gradle(Module.app)中的android下加一句代码,同步就可以了;
android{
useLibrary'org.apache.http.legacy'
}
1.2.可以降版本使用:
compileSdkVersion 23,
targetSdkVersion 23,
compile 'com.android.support:appcompat-v7:23.1.0',
将23版本改为以下的就可以。
2.当调用send方法时,虽然是泛型,但泛型只能用String,调用download()时,泛型只能是File。返回值为HttpHandler<>;
3.调用方法时,会有一个RequestCallBack参数,这个参数是一个抽象类,而不是接口,所以不能船“this”去实现它。
然后会得到请求成功和请求失败的方法,调用download时,还会有一个onLoading()方法,可在以上方法中实现具体功能。还是看代码吧!
三。具体代码:
1.send()请求文本数据:
//注解的方式
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.textView)
private TextView textView;
@ViewInject(R.id.imageView)
private ImageView imageView;
private HttpUtils httpUtils;
private String path="http://www.bai.du.com";
private HttpHandler<String> handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewUtils.inject(this);
//得到HttpUtils实例,参数:设置请求超时时间
httpUtils = new HttpUtils(5000);
/*
* 通过得到实例调用send,返回值为HttpHandler<String>
* 1参:请求方式
* 2参:请求路径
* 3参:抽象类,实现他的方法*/
handler = httpUtils.send(HttpRequest.HttpMethod.GET, path,
new RequestCallBack<String>() {
@Override
/*请求成功时回调*/
public void onSuccess(ResponseInfo<String> responseInfo) {
textView.setText(responseInfo.result);
Toast.makeText(MainActivity.this, "加载成功", Toast.LENGTH_SHORT).show();
}
/*请求失败时回调*/
@Override
public void onFailure(HttpException e, String s) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "加载失败", Toast.LENGTH_SHORT).show();
}
});
}
/*销毁当前Activity时,取消请求*/
@Override
protected void onDestroy() {
super.onDestroy();
handler.cancel();
}
}
这样,会将百度上的文本数据请求并显示在TextView上。
1.downlo()下载数据:
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.textView)
private TextView textView;
@ViewInject(R.id.imageView)
private ImageView imageView;
private HttpUtils httpUtils;
private String path="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
private HttpHandler<File> download;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewUtils.inject(this);
//得到HttpUtils实例,参数:设置请求超时时间,返回值为HttpHandler<File>
httpUtils = new HttpUtils(5000);
//调用download()方法
//其他参数不再去说,第五个参数,设置为true即为断点续传。
download = httpUtils.download(HttpRequest.HttpMethod.GET, path,
new File(Environment.getExternalStorageDirectory(), "abc.png").getAbsolutePath(),
null, true, new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
File result = responseInfo.result;
Bitmap bitmap = BitmapFactory.decodeFile(result.getAbsolutePath());
imageView.setImageBitmap(bitmap);
Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
/*正在加载时回调*/
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
textView.setText("百分比:"+(float)current/total*100+"%");
}
/*加载失败时回调*/
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
}
});
}
/*销毁当前Activity时,取消请求*/
@Override
protected void onDestroy() {
super.onDestroy();
download.cancel();
}
}
这样,就搞定了!