Retrofit常用方法入門

今年一直使用retrofit簡單做個總結。

示例接口:127.0.0.1:8080/DecrepitHouse/house/user_list

使用retrofit方式

public interface AddressApi {
    //用戶列表
    @GET("DecrepitHouse/house/user_list")
    Call<BaseBean<List<AddressBean>>> getUser();
}
調用getuser

private void getUserList() {
    userList = new ArrayList<>();
    RetrofitManager.getInstance(Constant.BASEURL1).createReq(AddressApi.class)
            .getUser().enqueue(new Callback<BaseBean<List<AddressBean>>>() {
        @Override
        public void onResponse(Call<BaseBean<List<AddressBean>>> call, Response<BaseBean<List<AddressBean>>> response) {
            if (response.body() != null && response.body().getCode() == 200) {
                swLayout.setRefreshing(false);
                    userList=response.body().getRows();
                // 根據a-z進行排序源數據
                Collections.sort(userList, pinyinComparator);
                adapter = new AdderssAdapter(getActivity(), userList, 0);
                lvAddress.setAdapter(adapter);
            } else {
                swLayout.setRefreshing(false);
            }
        }

        @Override
        public void onFailure(Call<BaseBean<List<AddressBean>>> call, Throwable t) {
            swLayout.setRefreshing(false);
        }
    });

}
簡單的查詢:示例接口:127.0.0.1:8080/DecrepitHouse/house/listunderling?user_id=1&username=zhangsan

接口文件:

public interface AddressApi {
    @GET("DecrepitHouse/house/listunderling")
    Call<BaseBean<List<AddressBean>>> getBranchList(@Query("user_id") String user_id,
    @Query("username") String username);
}
@QueryMap的使用

示例接口:127.0.0.1:8080/DecrepitHouse/house/listunderling?
userid=1&username=zhangsan&age=20&sex=1

接口文件

public interface AddressApi {
    @GET("DecrepitHouse/house/listunderling")
    Call<BaseBean<List<AddressBean>>> getBranchList(@QueryMap Map<String,Object> params);
}
在界面調用:

private void getBranch(){
    Map<String,Object> params=new HashMap<>();
    params.put("userid",1);
    params.put("username","wangshan");
    params.put("age",25);
    params.put("sex",1);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constant.BASEURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    AddressApi addressApi = retrofit.create(AddressApi.class);
    Call<BaseBean<List<AddressBean>>> call = addressApi.getBranchList(params);
    call.enqueue(new Callback<BaseBean<List<AddressBean>>>() {
        @Override
        public void onResponse(Call<BaseBean<List<AddressBean>>> call, Response<BaseBean<List<AddressBean>>> response) {
            if(response.body().getCode()==200){
                //成功後的執行邏輯
            }
        }
        @Override
        public void onFailure(Call<BaseBean<List<AddressBean>>> call, Throwable t) {

        }
    });

}
post表單提交

接口示例:127.0.0.1:8080/MVNFHM/mobile_login?USERNAME=dashan&PASSWORD

public interface LoginApi {

        @FormUrlEncoded
        @POST("MVNFHM/mobile_login")
        Call<BaseBean<User>> login(@Field("USERNAME") String USERNAME,
                                   @Field("PASSWORD") String PASSWORD);
}
調用這個接口的請求

private void getUser(){
    if(TextUtils.isEmpty(account.getText().toString().trim())){
        Toast.makeText(LoginActivity.this,"請輸入賬號",Toast.LENGTH_SHORT).show();
        return;
    }if(TextUtils.isEmpty(etPassword.getText().toString().trim())){
        Toast.makeText(LoginActivity.this,"請輸入密碼",Toast.LENGTH_SHORT).show();
        return;
    }
    RetrofitManager.getInstance(Constant.BASEURL).createReq(LoginApi.class)
            .login(account.getText().toString().trim(),etPassword.getText().toString().trim())
            .enqueue(new Callback<BaseBean<User>>() {
                @Override
                public void onResponse(Call<BaseBean<User>> call, Response<BaseBean<User>> response) {
                    //登錄成功後的返回
                    if(response.body().getCode()==1){
                        User user=response.body().getRows();
                        SPUtils.savePlumSession(user.getuSER_ID(),user.getuSERNAME());
                        Intent intent=new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent);
                        finish();
                    }else{
                        //提示錯誤的類型,信息
                        Toast.makeText(LoginActivity.this,response.body().getMessage(),Toast.LENGTH_SHORT).show();
                    }
                }
                @Override
                public void onFailure(Call<BaseBean<User>> call, Throwable t) {
                    Toast.makeText(LoginActivity.this,"獲取數據失敗",Toast.LENGTH_SHORT).show();
                }
            });
}
@FieldMap

示例接口:127.0.0.1:8080/MVNFHM/house/saveOrUpdate

參數jznd,zflb,cs,js,zdmj,jzmj,zfsyqk

public interface AddhouseApi {
    //添加房屋信息
    @FormUrlEncoded
    @POST("MVNFHM/house/saveOrUpdate")
    Call<JsonResult> addHouse(@FieldMap Map<String,String> params);

}
調用時候:

private void updateHouse() {
        Map<String, String> params = new HashMap<>();
        params.put("jznd", tvNd.getText().toString().trim());
        params.put("zflb", tvCategory.getText().toString().trim());
        params.put("cs", tvCengnum.getText().toString().trim());
        params.put("js", etJiannum.getText().toString().trim());
        params.put("zdmj", etDiarea.getText().toString().trim());
        params.put("jzmj", etArea.getText().toString().trim());
        params.put("zfsyqk", tvUsestate.getText().toString().trim());
 
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASEURL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        AddhouseApi addhouseApi = retrofit.create(AddhouseApi.class);
        Call<JsonResult> call = addhouseApi.updateHouse(params);
        call.enqueue(new Callback<JsonResult>() {
            @Override
            public void onResponse(Call<JsonResult> call, Response<JsonResult> response) {
                if (response.body() != null && response.body().getCode() == 1) {
                    Log.i(TAG, "onResponse: **********"+response.body().toString());
                    Toast.makeText(getApplicationContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(getApplicationContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onFailure(Call<JsonResult> call, Throwable t) {

            }
        });
    }
@Part上傳文件時候使用過

示例接口:127.0.0.1:8080/wssupload

參數housenum,多張圖片

public interface PhotoUploadApi {
    //房屋多圖上傳
    @Multipart
    @POST("wssupload")
    Call<JsonResult> uploadImage(@Part("housenum") String housenum, @PartMap Map<String, RequestBody> imgs1);

}
調用時候

private void upLoadPhoto() {
        Map<String, RequestBody> photos = new HashMap<>();
        if (imagePaths.size()>0) {
            for (int i=0;i<imagePaths.size();i++) {
                String substring = imagePaths.get(i).substring(imagePaths.get(i).lastIndexOf("/") + 1, imagePaths.get(i).length());
                photos.put("file\"; filename="+substring,RequestBody.create(MediaType.parse("multipart/form-data"), new File(imagePaths.get(i))));
            }
        }
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(Constant.ENDPOINT)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        PhotoUploadApi photoapi=  retrofit.create(PhotoUploadApi.class);
        Call<JsonResult> call = photoapi.uploadImage(housecode, photos);
        call.enqueue(new Callback<JsonResult>() {
            @Override
            public void onResponse(Call<JsonResult> call, Response<JsonResult> response) {
                Log.i(TAG, "onResponse:成功 "+response.body().toString());
            }

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

            }
        });

    }
以上就是我最常用的方法,希望能幫到大家。

發佈了39 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章