xUtils3 联网模块

xUtils3 联网模块
在做 Android 软件中,联网请求网络是必不可少的功能,xUtils3 封装了多种网络相关功能,
网络请求文本,并且可以使用 Get 或者 Post 请求文本;还支持超过 2G 大文件的下载,最满 意功能是还支持断点续传,什么是断点续传呢,就是下载一半文件后,接着原来下载的部分 接着下载文件,这样不至于重新下载,节约用户流量。 xUtils3 还支持文件上传,上传也支持大于 2G 的文件,另外录制的视频可以使用 xUtils3 上 传视频,用户头像也可以 xUtils3 上传。

1_xUtils3NetActivity 布局文件 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"><!-标题栏 -->
    <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="@android:color/holo_blue_light"
            android:gravity="center"
            android:orientation="horizontal">
        <TextView
                android:text="xUtils3 网络模块"
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@android:color/white"
                android:textSize="20sp"/>
    </LinearLayout>
    <Button
            android:id="@+id/btn_get_post"
            android:text="get 和 pos 请求"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    <Button android:id="@+id/btn_downloadfile"
            android:text="大文件下载"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    <Button android:id="@+id/btn_uploadfile"
            android:text="文件上传"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    <TextView android:id="@+id/tv_result"
              android:text="显示结果"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
    <ProgressBar android:id="@+id/progressBar" 
                 style="?android:progressBarStyleHorizontal"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"/>
</LinearLayout>

1.1 实例化布局 

@ContentView(R.layout.activity_net)
public class xUtils3NetActivity extends Activity {


    @ViewInject(R.id.tv_result)
    private TextView textView;

    @ViewInject(R.id.progressBar)
    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        x.view().inject(this);
    }

    @Event(value = {R.id.btn_get_post, R.id.btn_downloadfile, R.id.btn_uploadfile})
    private void getEvent(View view) {
        switch (view.getId()) {
            case R.id.btn_get_post:
                getDataByGet_Post();
                break;
            case R.id.btn_downloadfile:
                downloadfile();
                break;
            case R.id.btn_uploadfile:
                uploadfile();
                break;
        }
    }
} 

2_使用 xUtils3 的 Get 请求文本
Get 请求,成功后会有回调,本方法是最常用的请求文本方式

 private void getDataByGet_Post() {
        RequestParams request = new RequestParams("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
        x.http().get(request, new Callback.CommonCallback<String>() {

            @Override
            public void onSuccess(String result) {
                LogUtil.e("onSuccess-result==" + result);
                Toast.makeText(xUtils3NetActivity.this, "result==" + result, Toast.LENGTH_SHORT).show();
                textView.setText(result + "");
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                LogUtil.e("onError==" + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("onCancelled==" + cex.getMessage());
            }

            @Override
            public void onFinished() {
                LogUtil.e("onFinished==");
            }
        });
    }

3_使用 xUtils3 的 Post 请求文本 

  private void getDataByGet_Post() {
        RequestParams request = new RequestParams("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
        x.http().post(request, new Callback.CommonCallback<String>() {

            @Override
            public void onSuccess(String result) {
                LogUtil.e("onSuccess-result==" + result);
                Toast.makeText(xUtils3NetActivity.this, "result==" + result, Toast.LENGTH_SHORT).show();
                textView.setText(result + "");
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                LogUtil.e("onError==" + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("onCancelled==" + cex.getMessage());
            }

            @Override
            public void onFinished() {
                LogUtil.e("onFinished==");
            }
        });
    }

4_使用 xUtils3 文件下载&断点续传
xUtils3 支持大于 2G 的文件的下载,最惊喜的是还支持断点续传下载。

1_下载文件代码

 private void downloadfile() {
        final RequestParams reqest = new RequestParams("http://vfx.mtime.cn/Video/2016/09/02/mp4/160902093947207009_480. mp4 ");
        reqest.setAutoRename(false);// 设置是否根据头信息自动命名文件     
        reqest.setSaveFilePath(Environment.getExternalStorageDirectory() + "/atguigu/oppo.mp4");
        reqest.setExecutor(new PriorityExecutor(3, true));
        // 自定义线程池 , 有效 的值范围 [1, 3], 设置为 3 时 , 可能阻塞图片加载 .     
        reqest.setCancelFast(true);
        // 是否可以被立即停止 .

        x.http().get(reqest, new Callback.ProgressCallback<File>() {
            @Override
            public void onSuccess(File result) {

                LogUtil.e("onSuccess-下载文件成功" + result.toString());
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                LogUtil.e("onError-下载文件失败" + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("onCancelled-");
            }

            @Override
            public void onFinished() {
                LogUtil.e("onFinished-");
            }

            @Override
            public void onWaiting() {
                LogUtil.e("onWaiting-");
            }

            @Override
            public void onStarted() {
                LogUtil.e("onStarted-");
            }

            @Override
            public void onLoading(long total, long current, boolean isDownloading) {
                progressBar.setMax((int) total);
                progressBar.setProgress((int) current);
                LogUtil.e("onLoading-" + current + "/" + total);
            }
        });
    }

2_记得加权限 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

3_设置断点续传
下面红色的地方就是设置支持断点续传的地方

 private void downloadfile() {
        final RequestParams reqest = new RequestParams("http://vfx.mtime.cn/Video/2016/09/02/mp4/160902093947207 009_480.mp4");
        reqest.setAutoRename(false);
        // 设置是否根据头信息自动命名文件     
        reqest.setSaveFilePath(Environment.getExternalStorageDirectory() + "/atguigu/oppo.mp4");
        reqest.setAutoResume(true);
        //设置是否在下载是自动断点续传     
        reqest.setExecutor(new PriorityExecutor(3, true));
        // 自定义线程池 , 有效 的值范围 [1, 3], 设置为 3 时 , 可能阻塞图片加载 .     
        reqest.setCancelFast(true);// 是否可以被立即停止 .

        x.http().get(reqest, new Callback.ProgressCallback<File>() {
            @Override
            public void onSuccess(File result) {

                LogUtil.e("onSuccess-下载文件成功" + result.toString());
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                LogUtil.e("onError-下载文件失败" + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("onCancelled-");
            }

            @Override
            public void onFinished() {
                LogUtil.e("onFinished-");
            }

            @Override
            public void onWaiting() {
                LogUtil.e("onWaiting-");
            }

            @Override
            public void onStarted() {
                LogUtil.e("onStarted-");
            }

            @Override
            public void onLoading(long total, long current, boolean isDownloading) {
                progressBar.setMax((int) total);
                progressBar.setProgress((int) current);
                LogUtil.e("onLoading-" + current + "/" + total);

            }
        });

    }

5_大文件上传
1_支持文件上传服务器的搭建
使用 tomcat 搭建服务,支持文件上传


2_文件上传
文件上传的时候也设置,上传的进度,也需要重写 ProgressCallback 这个接口

 private void uploadfile() {
        RequestParams params = new RequestParams("http://192.168.11.215:8080/FileUpload/FileUploadServlet");
        //使用 multipart 表单上传文件     
        params.setMultipart(true);
        params.addBodyParameter("file", new File(Environment.getExternalStorageDirectory() + "/atguigu/oppo.mp4"), null, "oppo.mp4");
        x.http().post(params, new Callback.ProgressCallback<File>() {
            @Override
            public void onSuccess(File result) {

                LogUtil.e("onSuccess-上传文件成功" + result.toString());
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                LogUtil.e("onError-下载文件失败" + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {
                LogUtil.e("onCancelled-");
            }

            @Override
            public void onFinished() {
                LogUtil.e("onFinished-");
            }

            @Override
            public void onWaiting() {
                LogUtil.e("onWaiting-");
            }

            @Override
            public void onStarted() {
                LogUtil.e("onStarted-");
            }

            @Override
            public void onLoading(long total, long current, boolean isDownloading) {
                progressBar.setMax((int) total);
                progressBar.setProgress((int) current);
                LogUtil.e("onLoading-" + current + "/" + total);

            }
        });
    }

猜你喜欢

转载自www.cnblogs.com/yanglanwan/p/11305554.html