Android高级之xUtils框架(二):HttpUtils

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();
    }
}

这样,就搞定了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值