天天看點

RestHttp

RestHttp

項目位址: RestHttp

RestHttp

簡介:Android 基于 HttpURLConnection 簡單易用的網絡庫,支援 Http,Https,Http 檔案上傳,圖檔加載,面向接口的 API 調用方式,輕量的設計風格,Android 初學者的學習教程

  • RestHttp 提供了三級緩存(伺服器緩存,記憶體緩存,硬碟緩存),通過動态代理的方式實作了面向接口調用 API。
  • 封裝了 HttpURLConnection,簡單易用的 API 設計。
  • Debug 模式下設定日志 TAG,所有網絡請求日志輸出,友善調試。

gradle 依賴

compile 'cn.alien95:resthttp:1.0.5'

使用方法

  • 初始化:設定日志 TAG
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        RestHttp.initialize(this);
        Utils.initialize(this);
        RestHttp.setDiskCacheSize(100 * 1024 * 1024);
        if (BuildConfig.DEBUG) {
            Utils.setDebug(true,"Debug");
            RestHttp.setDebug(true, "network");
        }
    }
}
           

通過接口定義 API

  • API 接口類
public interface ServiceAPI {

    //同步請求方式:不能包含 Callback 參數
    @POST("/v1/users/login.php")
    UserInfo loginPostSync(@Field("name")
                   String name,
                   @Field("password")
                   String password);

    //異步請求:必須有一個 Callback 參數作為回調
    @POST("/v1/users/login.php")
    void loginAsyn(@Field("name")
                String name,
                   @Field("password")
                String password, RestCallback<UserInfo> restCallback);

    //GET 請求同步
    @GET("/v1/users/login_get.php")
    UserInfo loginGetSync(@Query("name")
                          String name,
                          @Query("password")
                          String password);

    //GET 請求異步
    @GET("/213-4")
    void getMusicData(@Query("topid") int topId,
                      @Query("showapi_appid") String showapiAppId,
                      @Query("showapi_sign") String secretKey,
                      RestCallback<String> callback);
}
           

Java 類方式請求資料

  • Http --- GET,POST
public void get(){
        mResult.setText("");
        HttpRequest.getInstance().get(GET_URL, new HttpCallback() {
            @Override
            public void success(String info) {
                mResult.setText(new Gson().toJson(info));
            }
        });
    }

    public void post(){
        mResult.setText("");
        Map<String,String> params = new HashMap<>();
        params.put("page","1");
        HttpRequest.getInstance().addHeader("UID","1");
        HttpRequest.getInstance().addHeader("token","9ba712a6210728364ea7c2d7457cde");
        HttpRequest.getInstance().post(POST_URL, params,new HttpCallback() {
            @Override
            public void success(String info) {
                mResult.setText(new Gson().toJson(info));
            }
        });
    }
           
  • Http 檔案上傳
    HttpFile.getInstance().uploadFile(UPLOAD_URL, null, "picture", mImageFile, new HttpCallback() {
       @Override
       public void success(String info) {
           Utils.Toast(info + " : http://115.29.107.20/image/test_upload.jpg");
       }
    }
               
  • Https
    HttpsRequest.getInstance().get("https://baidu.com/", new HttpsCallback() {
       @Override
       public void success(String info) {
            mResult.setText(info);
       }
    });
               

圖檔加載 --- 支援大圖壓縮

  • HttpImageView
<cn.alien95.resthttp.view.HttpImageView
     android:id="@+id/image"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="16dp"
     android:adjustViewBounds="true" />
           
imageView.setImageUrl(imageUrl);
           
  • 可以指定壓縮比例或固定的寬和高
image.setInSimpleSize(inSimpleSize);
image.setImageUrlWithCompress(IMAGE_SMALL_URL, 800, 600);
           

注意事項

  • 依賴的其他庫
compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.google.code.gson:gson:2.6.2'
           

詳細用法請看 Demo

RestHttp
RestHttp
RestHttp
RestHttp

繼續閱讀