okhttp-utils用法總結(jié)

對okhttp的封裝類,okhttp見:https://github.com/square/okhttp.
目前對應okhttp版本3.3.1.
okhttp-utils Github:https://github.com/hongyangAndroid/okhttputils

引用方法

  • Android Studio
    compile 'com.zhy:okhttputils:2.6.2'
  • Eclipse

下載最新jar:okhttputils-2_6_2.jar
注:需要同時導入okhttp和okio的jar,下載見:https://github.com/square/okhttp.

用法示例

json-server內(nèi)容

{
  "user": {
    "username": "Roy",
    "password": "123"
  },
  "users": [
    {
      "password": "123",
      "username": "Roy",
      "id": 1
    },
    {
      "password": "12345",
      "username": "Tom",
      "id": 2
    },
    {
      "password": "54321",
      "username": "Jack",
      "id": 3
    }
  ]
}

User類

public class User {

    public String username ; 
    public String password  ;
    
    public User() {
        // TODO Auto-generated constructor stub
    }
    
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString()
    {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

GET請求

適用于string對象

String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
OkHttpUtils
    .get()
    .url(url)
    .build()
    .execute(new StringCallback() //使用StringCallback回調(diào)String類型數(shù)據(jù)
            {
                @Override
                public void onError(Request request, Exception e)
                {

                }

                @Override
                public void onResponse(String response)
                {
                    //解析出的response為String類型,可以進一步處理
                }
            });

適用于JavaBean對象

public void getUser(View view)
    {
        String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
        OkHttpUtils
                .get()//
                .url(url)//
                .build()//
                .execute(new UserCallback() { //使用UserCallback回調(diào)User類的對象,可自己定義JavaBean對象
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        mTv.setText("onError:" + e.getMessage());
                        //mTv為TextView打印Error信息
                    }

                    @Override
                    public void onResponse(User response, int id) {
                        mTv.setText("onResponse:" + response.getPassword());
                        //mTv為TextView打印response信息
                        //解析出的response為User類對象,此處使用response.getPassword()來獲取password屬性
                    }
                });
    }
UserCallback
import com.google.gson.Gson;
import com.zhy.http.okhttp.callback.Callback;

import java.io.IOException;

import okhttp3.Response;

public abstract class UserCallback extends Callback<User>
{
    @Override
    public User parseNetworkResponse(Response response, int id) throws IOException
    {
        String string = response.body().string();
        User user = new Gson().fromJson(string, User.class);
        return user;
    }
}

適用于List<Bean>對象

public void getUsers(View view)
    {
        String url = "http://192.168.191.1:3000/" + "users"; //url設置成自己的json-server地址
        OkHttpUtils//
                .get()//
                .url(url)//
                .build()//
                .execute(new ListUserCallback() //使用ListUserCallback回調(diào)List<Bean>數(shù)組,可自己定義JavaBean對象
                {
                    @Override
                    public void onError(Call call, Exception e, int id)
                    {
                        mTv.setText("onError:" + e.getMessage());
                        //mTv為TextView打印Error信息
                    }

                    @Override
                    public void onResponse(List<User> response, int id)
                    {
                        mTv.setText("onResponse:" + response.get(2).toString());
                        //mTv為TextView打印response信息
                        //解析出的response為List<User>數(shù)組,此處使用response.get(2).toString()來獲取數(shù)組中第3個User對象,并用toString方法輸出
                    }
                });
    }
ListUserCallback
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zhy.http.okhttp.callback.Callback;

import java.io.IOException;
import java.util.List;

import okhttp3.Response;

public abstract class ListUserCallback extends Callback<List<User>>
{

    @Override
    public List<User> parseNetworkResponse(Response response,int id) throws IOException
    {
        String string = response.body().string();
        List<User> users = new Gson().fromJson(string, new TypeToken<List<User>>(){}.getType());
        return users;
    }


}

POST請求

適用于json字符串

public void postString(View view)
    {
        String url = "http://192.168.191.1:3000/" + "users"; //url設置成自己的json-server地址
        OkHttpUtils
                .postString()
                .url(url)
                .mediaType(MediaType.parse("application/json; charset=utf-8")) //設置post的字符串為json字符串并設置編碼
                .content(new Gson().toJson(new User("zhy", "123"))) //用Gson將User對象轉(zhuǎn)化為Json字符串的形式作為content
                .build()
                .execute(new MyStringCallback());
    }
MyStringCallback
package Callback;

import android.util.Log;

import com.zhy.http.okhttp.callback.StringCallback;

import okhttp3.Call;

public class MyStringCallback extends StringCallback
{
    //MyStringCallback用于向json server處理有關(guān)字符串的請求(Json/Http/Https 字符串callback)

    @Override
    public void onError(Call call, Exception e, int id)
    {
        e.printStackTrace();
    }

    @Override
    public void onResponse(String response, int id)
    {
        Log.i("Tag", "MyStringCallback success");

        switch (id)
        {
            case 100:
                Log.i("http", "http callback success");
                break;
            case 101:
                Log.i("https", "https callback success");
                break;
        }
    }
}

適用于JavaBean對象

public void postUser(View view)
    {
        String url = "http://192.168.191.1:3000/" + "user"; //url設置成自己的json-server地址
        OkHttpUtils
                .post()//
                .url(url)//
                .addParams("username", "Roy")//設置Post參數(shù)
                .addParams("password", "123")//設置Post參數(shù)
                .build()//
                .execute(new UserCallback() { //使用UserCallback回調(diào)User類的對象,可自己定義JavaBean對象,UserCallback內(nèi)容同上
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        mTv.setText("onError:" + e.getMessage());
                        //mTv為TextView打印Error信息
                    }

                    @Override
                    public void onResponse(User response, int id) {
                        mTv.setText("onResponse:" + response.getPassword());
                        //mTv為TextView打印response信息,response為剛剛POST的User類對象
                        //解析出的response為User類對象,此處使用response.getPassword()來獲取password屬性
                    }
                });
    }

待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,898評論 2 45
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,324評論 25 708
  • 瘦子亦說:“大哥是好人,我與三弟本是乞丐,快要餓死之時大哥救下我們,落草于此做匪徒。” 我聽了他們的故事不禁潸然淚...
    我們那些事兒閱讀 198評論 0 0
  • 文件解壓縮 第三方解壓縮框架——ZipArchive下載地址:https://github.com/ZipArch...
    Erbash閱讀 205評論 0 0
  • 第一次見到二哥,是在十多年前。當年,我剛剛大學畢業(yè),陪老爸回老家去看他多年未見的哥哥。二叔的二兒子,就是我的...
    天長地久京閱讀 425評論 0 0

友情鏈接更多精彩內(nèi)容