okhttp的輔助類:okhttp-utils

jopen 9年前發布 | 51K 次閱讀 Android開發 移動開發 okhttp-utils

okhttp的輔助類

由于整合了Gson,支持直接返回對象(例如User),對象集合(例如:List<User>),所以記得使用時必須加入Gson的依賴,jar包gson-2.2.1.jar.

sample項目的代碼也上傳了,里面包含依賴神馬的,不過里面的請求url可能部分是無法使用的,因為我是本機做的測試,大家可以下載參考。ps:以module的形式導入。

目前支持

  • 一般的get請求
  • 一般的post請求
  • 基于Http的文件上傳
  • 文件下載
  • 加載圖片
  • 支持請求回調,直接返回對象、對象集合
  • 支持session的保持

例如:服務器返回:{"username":"zhy","password":"123"}

客戶端可按照如下發起請求,直接獲得User對象

 OkHttpClientManager.getAsyn("http://192.168.56.1:8080/okHttpServer/user!getUser",
new OkHttpClientManager.ResultCallback<User>()
{
    @Override
    public void onError(Request request, Exception e)
    {
        e.printStackTrace();
    }

    @Override
    public void onResponse(User user)
    {
        mTv.setText(u.toString());//UI線程
    }
});

同樣支持List這種集合的方式。

用法

對于Android Studio的用戶,可以選擇添加:

compile 'com.squareup.okhttp:okhttp:2.4.0'

或者Eclipse的用戶,可以下載最新的jar okhttp he latest JAR ,添加依賴就可以用了。

注意:okhttp內部依賴okio,別忘了同時導入okio:

compile 'com.squareup.okio:okio:1.5.0'

最新的jar地址:okio the latest JAR

GET請求

OkHttpClientManager.getAsyn("http://192.168.56.1:8080/okHttpServer/user!getSimpleString", new OkHttpClientManager.ResultCallback<String>()
{
    @Override
    public void onError(Request request, Exception e)
    {
        e.printStackTrace();
    }

    @Override
    public void onResponse(String u)
    {
        mTv.setText(u);
    }
});

直接返回對象

 OkHttpClientManager.getAsyn("http://192.168.56.1:8080/okHttpServer/user!getUser",
new OkHttpClientManager.ResultCallback<User>()
{
    @Override
    public void onError(Request request, Exception e)
    {
        e.printStackTrace();
    }

    @Override
    public void onResponse(User u)
    {
        mTv.setText(u.toString());
    }
});

注意會根據傳入的泛型,比如User,則會將服務器返回的Json字符串轉化為user對象,如果在轉化過程中發生錯誤,onError會被回調。記得加入Gson的依賴。

直接返回對象集合

OkHttpClientManager.getAsyn("http://192.168.56.1:8080/okHttpServer/user!getUsers",
    new OkHttpClientManager.ResultCallback<List<User>>()
    {
        @Override
        public void onError(Request request, Exception e)
        {
            e.printStackTrace();
        }

        @Override
        public void onResponse(List<User> us)
        {
            Log.e("TAG", us.size() + "");
            mTv.setText(us.get(1).toString());
        }
    });

注意會根據傳入的泛型,比如List,則會將服務器返回的Json字符串轉化為List對象,如果在轉化過程中發生錯誤,onError會被回調。記得加入Gson的依賴。

POST請求

 OkHttpClientManager.postAsyn(url,callback,params);

基于HTTP POST的大文件上傳(可包一般鍵值對)

File file = new File(Environment.getExternalStorageDirectory(), "test1.txt");
        OkHttpClientManager.postAsyn("http://192.168.1.103:8080/okHttpServer/fileUpload",//
                callback,//
                file,// 文件
                "mFile",// 文件域的name
                new OkHttpClientManager.Param[]{
                new OkHttpClientManager.Param("username", "zhy")}//一般的鍵值對,可為null
        );

顯示圖片

 OkHttpClientManager.displayImage(
                mImageView, "http://images.csdn.net/20150817/1.jpg");

會自動根據ImageView的大小進行壓縮。

大文件下載

 OkHttpClientManager.downloadAsyn(
        //文件路徑
        "http://192.168.1.103:8080/okHttpServer/files/messenger_01.png",        //文件存儲路徑
        Environment.getExternalStorageDirectory().getAbsolutePath(), 
        //回調
        new OkHttpClientManager.ResultCallback<String>()
        {
            @Override
            public void onFailure(Request request, IOException e)
            {
            }

            @Override
            public void onResponse(String response)
            {
                    //如果成功,response為下載完成后文件的完整路徑
            }
        });

項目主頁:http://www.baiduhome.net/lib/view/home/1440420345544

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!