036 Android Xutils3網絡請求框架使用

1.xUtils3 介紹android

xUtils 中目前包括了主要的四大模塊,分別爲 DbUtils 模塊、ViewUtils 模塊、HttpUtils 模塊以及 BitmapUtils 模塊。json

xUtils3網絡模塊大大方便了在實際開發中網絡模塊的開發,xUtils3網絡模塊大體包括GET請求、POST請求、如何使用其餘請求方式、上傳文件、下載文件、使用緩存等功能。緩存

本文重點講解:HttpUtils 模塊的使用。服務器

2.xUtils3 的主要特性以下:cookie

(1)穩定的基石: AbsTask 和統一的回調接口 Callback, 任何異常, 即便你的回調方法實現有異常都會進入 onError,任何狀況下 onFinished 總會讓你知道任務結束了。網絡

(2)基於高效穩定的 orm 工具,http 模塊得以更方便的實現 cookie (支持 domain、 path、 expiry 等特性)和 緩存(支持 Cache-Control、Last-Modified、 ETag 等特性)的支持。app

(3)有了強大的 http 及其下載緩存的支持,image 模塊的實現至關的簡潔,而且支持回收被 view 持有,但被 Mem Cache 移除的圖片,減小頁面回退時的閃爍。dom

(4)View 註解模塊僅僅400多行代碼卻靈活的支持了各類 View 注入和事件綁定, 包括擁有多了方法的 listener 的支持。curl

3. HttpUtils 模塊的主要特性。異步

(1)支持同步,異步方式的請求。

(2)支持大文件上傳,上傳大文件不會出現 oom 內存溢出狀況。

(3)支持 GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT 的請求。

(4)下載支持301/302重定向,支持設置是否根據 Content-Disposition 重命名下載的文件。

(5)返回文本內容的請求(默認只啓用了 GET 請求)支持緩存,可設置默認過時時間和針對當前請求的過時時間。

4.xUtils3 使用環境配置

(1)添加依賴

implementation 'org.xutils:xutils:3.5.1'

(2)在manifest文件中添加權限

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

 (3)對Xutils3進行初始化

新建一個類MyApplication繼承Application:

package com.example.administrator.test66smartbeijing;
import android.app.Application;
import org.xutils.x;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(false); //輸出debug日誌,開啓會影響性能
    }
}

在Manifest文件中註冊MyApplication

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/icon_150"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

5.使用案例

package com.example.administrator.test66smartbeijing.fragment;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.administrator.test66smartbeijing.R;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;


/**
 * 利用tabLayout+viewPager實現帶頂部菜單欄的fragment
 */
public class NewsCenterVolleyFragment extends Fragment {

    //handler用來處理消息
    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
        @SuppressLint("ResourceType")
        @Override
        public void handleMessage(Message msg) {
            //更新ui
            if(msg.what==0x01){
                //接收到消息後,從當前的fragment跳轉到另外一個activity中
                String queryResultStr= (String) msg.obj;
            }
        }
    };

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDataFromServer();
        View view=inflater.inflate(R.layout.layout_fm_newscenter_volley,container,false);
        return view;

    }

    /**
     * 從服務器獲取數據
     */
    private void getDataFromServer() {
        //請求地址
        String url="http://118.25.152.62:8080/zhbj/categories.json";
        RequestParams params = new RequestParams(url);
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                //解析result
                System.out.println(result);
            }
            //請求異常後的回調方法
            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
            }
            //主動調用取消請求的回調方法
            @Override
            public void onCancelled(CancelledException cex) {
            }
            @Override
            public void onFinished() {
            }
        });

    }


}

6.效果展現

System.out: {"retcode":200,"data":[{"id":10000,"title":"新聞","type":1,"children":[{"id":10007,"title":"北京","type":1,"url":"/10007/list_1.json"},{"id":10006,"title":"中國","type":1,"url":"/10006/list_1.json"},{"id":10008,"title":"國際","type":1,"url":"/10008/list_1.json"},{"id":10010,"title":"體育","type":1,"url":"/10010/list_1.json"},{"id":10091,"title":"生活","type":1,"url":"/10091/list_1.json"},{"id":10012,"title":"旅遊","type":1,"url":"/10012/list_1.json"},{"id":10095,"title":"科技","type":1,"url":"/10095/list_1.json"},{"id":10009,"title":"軍事","type":1,"url":"/10009/list_1.json"},{"id":10093,"title":"時尚","type":1,"url":"/10093/list_1.json"},{"id":10011,"title":"財經","type":1,"url":"/10011/list_1.json"},{"id":10094,"title":"育兒","type":1,"url":"/10094/list_1.json"},{"id":10105,"title":"汽車","type":1,"url":"/10105/list_1.json"}]},{"id":10002,"title":"專題","type":10,"url":"/10006/list_1.json","url1":"/10007/list1_1.json"},{"id":10003,"title":"組圖","type":2,"url":"/10008/list_1.json"},{"id":10004,"title":"互動","type":3,"excurl":"","dayurl":"","weekurl":""}],"extend":[10007,10006,10008,10014,10012,10091,10009,10010,10095]}
相關文章
相關標籤/搜索