網(wǎng)絡(luò)請(qǐng)求,如斯優(yōu)雅

Gradle 集成

dependencies {
    implementation 'com.hjq:http:2.0'
    implementation 'com.squareup.okhttp3:okhttp:3.12.1'
    implementation 'com.google.code.gson:gson:2.8.5'
}

配置權(quán)限

<!-- 聯(lián)網(wǎng)權(quán)限 -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- 訪問網(wǎng)絡(luò)狀態(tài) -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!-- 外部存儲(chǔ)讀寫權(quán)限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

服務(wù)器配置

public class RequestServer implements IRequestServer {

    @Override
    public String getHost() {
        return "https://www.baidu.com/";
    }

    @Override
    public String getPath() {
        return "api/";
    }
}

初始化

EasyConfig.with(new OkHttpClient())
        // 是否打印日志
        .setLog(BuildConfig.DEBUG)
        // 設(shè)置服務(wù)器配置
        .setServer(server)
        // 設(shè)置請(qǐng)求處理策略
        .setHandler(new RequestHandler())
        // 添加全局請(qǐng)求參數(shù)
        //.addParam("token", "6666666")
        // 添加全局請(qǐng)求頭
        //.addHeader("time", "20191030")
        .into();

配置接口

public class LoginApi implements IRequestApi {

    @Override
    public String getApi() {
        return "user/login";
    }

    /** 用戶名 */
    private String userName;
    
    /** 登錄密碼 */
    private String password;

    public LoginApi setUserName(String userName) {
        this.userName = userName;
        return this;
    }

    public LoginApi setPassword(String password) {
        this.password = password;
        return this;
    }
}
  • 可為這個(gè)類的字段加上一些注解

    • @HttpHeader:標(biāo)記這個(gè)字段是一個(gè)請(qǐng)求頭參數(shù)

    • @HttpIgnore:標(biāo)記這個(gè)字段不會(huì)被發(fā)送給后臺(tái)

    • @HttpRename:重新定義這個(gè)字段發(fā)送給后臺(tái)的參數(shù)名稱

  • 可為這個(gè)類多實(shí)現(xiàn)一些接口

    • implements IRequestHost:實(shí)現(xiàn)這個(gè)接口之后可以重新指定這個(gè)請(qǐng)求的主機(jī)地址

    • implements IRequestPath:實(shí)現(xiàn)這個(gè)接口之后可以重新指定這個(gè)請(qǐng)求的接口路徑

發(fā)起請(qǐng)求

EasyHttp.post(this)
        .api(new LoginApi()
                .setUserName("Android 輪子哥")
                .setPassword("123456"))
        .request(new OnHttpListener<HttpData<LoginBean>>() {

            @Override
            public void onSucceed(HttpData<LoginBean> data) {
                ToastUtils.show("登錄成功");
            }

            @Override
            public void onFail(Exception e) {}
        });

下載文件

下載緩存策略:在指定下載文件 md5 或者后臺(tái)有返回 md5 的情況下,下載框架默認(rèn)開啟下載緩存模式,如果這個(gè)文件已經(jīng)存在手機(jī)中,并且經(jīng)過 md5 校驗(yàn)文件完整,框架就不會(huì)重復(fù)下載,而是直接回調(diào)下載監(jiān)聽。減輕服務(wù)器壓力,減少用戶等待時(shí)間。

EasyHttp.download(this)
        .method(HttpMethod.GET)
        .file(new File(Environment.getExternalStorageDirectory(), "手機(jī)QQ.apk"))
        .url("https://qd.myapp.com/myapp/qqteam/AndroidQQ/mobileqq_android.apk")
        .md5("47CBDF2A2940B7773DD1B63CBCFD86E1")
        //.url("http://dldir1.qq.com/weixin/android/weixin708android1540.apk")
        .listener(new OnDownloadListener() {

            @Override
            public void onDownloadStart(DownloadTask task) {
                mProgressBar.setVisibility(View.VISIBLE);
                ToastUtils.show("下載開始:" + task.getFile().getName());
            }

            @Override
            public void onDownloadProgress(DownloadTask task) {
                mProgressBar.setProgress(task.getProgress());
            }

            @Override
            public void onDownloadComplete(DownloadTask task) {
                mProgressBar.setVisibility(View.GONE);
                ToastUtils.show("下載完成:" + task.getFile().getPath());
            }

            @Override
            public void onDownloadError(DownloadTask task, Exception e) {
                mProgressBar.setVisibility(View.GONE);
                ToastUtils.show("下載出錯(cuò):" + e.getMessage());
            }

        }).start();

Github傳送地址,歡迎Star

Android 技術(shù)討論 Q 群:10047167

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。