Android 網路框架Retrofit的使用和解析

dingcheng998發表於2016-11-24

使用步驟:

步驟1:定義介面

public interface GitHubService {
    /*
     *Post多引數Map
     *Post方法 "getnews" 為路徑
     * mapPost方法名
     * @FieldMap多個請求引數
     * newsPojo 接受的實體類
     * @FormUrlEncoded將會自動將請求引數的型別調整為application/x-www-form-urlencoded 不能用於Get請求
     */
    @FormUrlEncoded
    @POST("getnews")
    Call<newsPojo> mapPost(@FieldMap Map<String,Object> map);

    /*
     *Post多引數
     *Post方法 "getnews" 為路徑
     * singlePost方法名
     * @Field多個請求引數
     * newsPojo 接受的實體類
     * @FormUrlEncoded將會自動將請求引數的型別調整為application/x-www-form-urlencoded 不能用於Get請求
     */
    @FormUrlEncoded
    @POST("getnews")
    Call<newsPojo> singlePost(@Field("appey") String appkey,@Field("lasttime") String lasttime);

    /*
     *Post 實體類引數
     *所有引數統一封裝到類中
     */
    @FormUrlEncoded
    @POST("getnews")
    Call<newsPojo>  bodyPost(@Body newsPaper news);

    /*
     *單引數Get方法
     */
    @GET("getnews")
    Call<newsPojo> singleGet(@Query("appkey") String appkey,@Query("appkey1") String appkey1);

    /*
    *多引數Get方法
    */
    @GET("getnews")
    Call<newsPojo> mapGet(@QueryMap Map<String, String> options);

    /*
     *List集合引數Get方法
     */
    @GET("getnews")
    Call<newsPojo> ListGet(@Query("user")List<String> list);

    /*
     *相對路徑引數地址 @Path
     * List<newsPaper> 接受的集合
     * @Path可以用於任何請求方式,例如Post、Put等。
     */
    @GET("group/{id}/users")
    Call<List<newsPaper>> groupList(@Path("id") int groupId, @Query("sort") String sort);

    /*
     **單個檔案上傳
     */
    @Multipart
    @PUT("upload") // @POST("upload")
    Call<ResponseBody> updateFile(@Part("description") RequestBody description ,@Part MultipartBody.Part file);

    @Multipart
    @POST("upload")
    Call<ResponseBody> uploadMultipleFiles(@Part("description") RequestBody description,
            @Part MultipartBody.Part file1,
            @Part MultipartBody.Part file2);

    /*
     *新增自定義的header
     * 靜態方法
     */
    @Headers("Cache-Control: max-age=640000")
    @GET("getnews")
    Call<newsPojo> headerGet(@QueryMap Map<String, String> options);

    /*
      *靜態 多個定義
     */
    @Headers({
            "Accept: application/vnd.github.v3.full+json",
            "User-Agent: Retrofit-Sample-App"
    })
    @GET("users/{username}")
    Call<newsPaper> getUser(@Path("username") String username);

    /*
     *動態方法
     */
    @GET("getnews")
    Call<newsPojo> headNews(@Header("Content-Range") String contentRange, @Query("q") String name);

    /*
     *Post提交Json引數
     * RequestBody 為Json、等資料
     */
    @Headers({"Content-Type: application/json","Accept: application/json"})//需要新增頭
    @POST("user")
    Call<newsPaper> postJson(@Body RequestBody json);//傳入的引數為RequestBody
}

呼叫:

//步驟1
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://192.168.80.2:8080")
                .addConverterFactory(GsonConverterFactory.create()) //資料轉換方式 GsonConverterFactory.create() Gson解析
                .build();
        //步驟2
        GitHubService service = retrofit.create(GitHubService.class);

        //步驟3  呼叫請求方法,並得到Call例項
        Call<newsPojo> call = service.singlePost("appkey","0");

        //步驟4 同步請求
        try {
            newsPojo response = call.execute().body();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //步驟4 非同步請求
        call.enqueue(new Callback<newsPojo>() {
            @Override
            public void onResponse(Call<newsPojo> call, Response<newsPojo> response) {
                //請求成功返回的結果
                System.out.println("返回資料"+response.body().getReason());
            }

            @Override
            public void onFailure(Call<newsPojo> call, Throwable t) {

            }
        });

        //步驟1 Post提交Json資料
        Retrofit retrofitJson = new Retrofit.Builder()
                .baseUrl("http://192.168.80.2:8080/fagagagag")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        //步驟2 Post提交Json資料
        GitHubService serviceJson = retrofit.create(GitHubService.class);


        //步驟3 Post提交Json資料
        newsPaper pojo = new newsPaper();
        Gson gson=new Gson();
        String json= gson.toJson(pojo);
        RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),json);

        //步驟4 Post提交Json資料
        Call<newsPaper> callJson = serviceJson.postJson(body);

        //步驟5 請求
        callJson.enqueue(new Callback<newsPaper>() {
            @Override
            public void onResponse(Call<newsPaper> call, Response<newsPaper> response) {

            }

            @Override
            public void onFailure(Call<newsPaper> call, Throwable t) {

            }
        });
    }


相關文章