Retrofit使用小结

133 阅读1分钟

1、@Get 空参数(参数通过map集合传递)

 /**
 * get请求
 *
 * @param url      请求url
 * @param arrayMap 接口参数
 * @return 返回数据
 */
@GET
Observable<Object> getBean(@Url String url, @QueryMap() Map<String, String> arrayMap);

@Post 空参数(参数通过map集合传递)

  /**
 * post请求
 *
 * @param url      请求url
 * @param arrayMap 接口参数
 * @return 返回数据
 */
@FormUrlEncoded
@POST
Observable<Object> postBean(@Url String url, @FieldMap() Map<String, String> arrayMap);

2、上传文件 空参数(参数通过map集合传递)

/**
 * post上传文件
 *
 * @param url         请求url
 * @param data        请求参数
 * @param description 文件描述
 * @param file        文件路径
 * @return 返回数据
 */
@Multipart
@POST
Observable<Object> uploadFile(@Url String url, @PartMap Map<String, RequestBody> data, @Part("description") RequestBody description,
                              @Part MultipartBody.Part file);

文件上传调用方法:

 RequestBody requestFile =
            RequestBody.create(MediaType.parse("multipart/form-data"), file);

    MultipartBody.Part body =
            MultipartBody.Part.createFormData("photo_url", file.getName(), requestFile);

    String descriptionString = "userPhotoDescription";
    RequestBody description =
            RequestBody.create(
                    MediaType.parse("multipart/form-data"), descriptionString);
                    
<**其中  photo_url 为key **>

文件上传需传输参数时需转换为RequestBody,转换方法如下:

   /**
 * 文件上传参数转换
 *
 * @param value 传入值
 * @return 返回值
 */
public static RequestBody toRequestBody(String value) {
    RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), value);
    return requestBody;
}

判断一串Json数据是JSONObject还是JSONArray:

 private DtoResult questionApiResult(String responseInfo) {
    DtoQuestionResult dtoQuestionResult = new GsonUtils<DtoQuestionResult>().fromJson(responseInfo, DtoQuestionResult.class);
    Gson gson = new Gson();
    DtoResult dtoResult = new DtoResult();
    dtoResult.errmsg = dtoQuestionResult.message;
    dtoResult.dataObject = dtoQuestionResult.data;
    if (dtoResult.dataObject != null && classOfT != null) {
        try {
            Object json = new JSONTokener(gson.toJson(dtoResult.dataObject)).nextValue();
            if (json instanceof JSONObject) {
                dtoResult.dataObject = gson.fromJson(gson.toJson(dtoResult.dataObject), classOfT);
            } else if (json instanceof JSONArray) {
                dtoResult.dataObject = getJSONArray(dtoResult.dataObject, classOfT);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return dtoResult;
}

获取JSONArray实体转换结果:

 /**
 * 获取JSONArray转换实体类集合
 *
 * @param data     数据源
 * @param classOfT 实体类
 * @return List集合 List<T> listT
 */
private <T> List<T> getJSONArray(Object data, Class<T> classOfT) {
    List<T> list = new ArrayList<>();
    try {
        Gson gson = new Gson();
        JsonArray arry = new JsonParser().parse(gson.toJson(data)).getAsJsonArray();
        for (JsonElement jsonElement : arry) {
            list.add(gson.fromJson(jsonElement, classOfT));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}