• retrofit之笔记内容


    问题?

    6.retrofit的原理:动态代理模式
    5.retrofit的基本用法?
    4.项目中的retrofit的使用情况(基本流程 和 文件和图片上传记录)?特殊:文件(和图片)上传
    3.Retrofit各个注解的含义及作用?
    2.android retrofit 请求参数格式RequestBody的方法
    1.retrofit的模型?

    ====  

    5.retrofit的基本用法:


    public interface MovieService{
    @GET("top250")
    Call<MovieEntity> getTopMovie(@Query("start")int start,@Query("count") int count);
    }
    然后你还需要创建一个Retrofit对象:
    public static final String baseUrl="https://api.douban.com/v2/movie/";
    Retrofit retrofit=new Retrofit.Builder()
    .baseUrl(baseUrl)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

    再用这个Retrofit对象创建一个MovieService对象:
    MovieService movieService=retrofit.create(MovieService.class);
    Call<MovieEntity> call=movieService.getTopMovie(0,10);
    //call.enqueue()异步请求,call.execute()同步请求
    call.enqueue(new Callback<MovieEntity>(){
    @Override
    public void onResponse(Call<MovieEntity> call, Response<MovieEntity> response) {
    result_TV.setText(response.body().toString());
    }
    @Override
    public void onFailure(Call<MovieEntity> call, Throwable t) {
    result_TV.setText(t.getMessage());
    }
    });
    在这边还可以移除一个请求:
    Retrofit 1.x版本没有直接取消正在进行中任务的方法的,在2.x的版本中,Service的模式变成Call的形式的原因是为了让正在进行的事务可以被取消。
    要做到这点,只需要调用call.cancel()。
    以上就是Retrofit2.0的基本用法了,下面讲讲它的详细用法:


    4.项目中的retrofit的使用情况(基本流程 和 文件和图片上传记录)?

    4.1项目中retrofit的使用流程:
    public interface CommonApi {
    @POST("common/getTime.htm")
    Observable<BaseJson<Long>> getNetTime(@Body RequestBody requestBody);
    }

    public class UsualConfigModel extends BaseModel implements UsualConfigContract.Model {
    @Override
    public Observable<BaseJson<Long>> getNetTime(Map<String, Object> hashMap) {
    Observable<BaseJson<Long>> observable = mRepositoryManager.obtainRetrofitService(CommonApi.class)
    .getNetTime(ToRequestBodyUtil.toRequestBody(hashMap));
    return observable;
    }
    }

    public static RequestBody toRequestBody(Map<String, Object> map) {
    String input = buildParams(map);
    input = replaceURL(input);
    //RequestBody requestBody = RequestBody.create(MediaType.parse("application/json, text/plain; charset=utf-8"), input);
    RequestBody requestBody = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"), input);
    return requestBody;
    }

    public static RequestBody buildParamV2(Map<String, String> paramsMap, boolean isFilter) {
    FormBody.Builder builder = new FormBody.Builder();
    for (String key : paramsMap.keySet()) {
    String value = paramsMap.get(key);
    builder.add(key, value);// 追加表单信息
    }
    RequestBody formBody = builder.build();
    //Request request = new Request.Builder().url(netUrl).post(formBody).build();
    return formBody;
    }

    4.2. 项目中retrofit的文件(和图片)上传使用流程:
    VisitApi的类:
    /**
    * @des: 会议详情--新增 :files 文件,图片上传等 : ("", param, files).then( ());
    // 采用这种方式:
    */
    @POST("record/meeting/saveRecordMeetingInfo.htm")
    Observable<MeetDetail> newAddMeetDetail(@Body RequestBody body);

    @Multipart
    @POST("record/meeting/saveRecordMeetingInfo.htm")
    Observable<BaseCode> newAddMeetDetailV1(@QueryMap Map<String, Object> usermaps, @Part List<MultipartBody.Part>fileMap,
    @Part List<MultipartBody.Part>photoMap, @Part List<MultipartBody.Part> signMap);

    @Multipart
    @POST("record/meeting/saveRecordMeetingInfo.htm")
    Observable<BaseCode> newAddMeetDetailV2(@QueryMap Map<String, Object> usermaps, @PartMap Map<String, RequestBody>fileMap,
    @PartMap Map<String, RequestBody>photoMap, @PartMap Map<String, RequestBody> signMap);

    /**
    * @des: 会议修改的接口
    */
    @Override
    public Observable<MeetDetail> changedMeetDetail(Map<String, Object> hashMap, List<String> filePaths, List<String> photoPaths, List<String> signPaths) {
    MultipartBody.Builder build = new MultipartBody.Builder();
    for (Map.Entry<String, Object> entry : hashMap.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    build.addFormDataPart(key, String.valueOf(value));//
    }
    if (filePaths != null && filePaths.size() > 0) {
    for (int i = 0; i < filePaths.size(); i++) {
    File file = new File(filePaths.get(i));
    RequestBody fileRQ = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    build.addFormDataPart("files", file.getName(), fileRQ);//
    }
    }
    if (photoPaths != null && photoPaths.size() > 0) {
    for (int i = 0; i < photoPaths.size(); i++) {
    File file = new File(photoPaths.get(i));
    RequestBody fileRQ = RequestBody.create(MediaType.parse("image/*"), file);
    build.addFormDataPart("photos", file.getName(), fileRQ);
    }
    }
    MultipartBody body=build.build(); //MultipartBody继承RequestBody
    Observable<MeetDetail> observable = mRepositoryManager.obtainRetrofitService(VisitApi.class)
    .changedMeetDetail(body);
    return observable;
    }

    // 不适合的方法:
    public Observable<BaseCode> changedMeetDetail2(Map<String, Object> hashMap, List<String> filePaths, List<String> photoPaths, List<String> signPaths) {
    List<MultipartBody.Part> parts1=new ArrayList<>();
    if (filePaths != null && filePaths.size() > 0) {
    for (int i = 0; i < filePaths.size(); i++) {
    File file = new File(filePaths.get(i));
    RequestBody fileRQ = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    MultipartBody.Part part = MultipartBody.Part.createFormData("files", file.getName(), fileRQ);
    parts1.add(part);
    }
    }else {
    MultipartBody.Part part = MultipartBody.Part.createFormData("","");//直接传入两个空字符串就可以了...不能传null;
    parts1.add(part);
    }

    List<MultipartBody.Part> parts2=new ArrayList<>();
    if (photoPaths != null && photoPaths.size() > 0) {
    for (int i = 0; i < photoPaths.size(); i++) {
    File file = new File(photoPaths.get(i));
    RequestBody fileRQ = RequestBody.create(MediaType.parse("image/*"), file);
    MultipartBody.Part part = MultipartBody.Part.createFormData("photos", file.getName(), fileRQ);
    parts2.add(part);
    }
    }else {
    MultipartBody.Part part = MultipartBody.Part.createFormData("","");//直接传入两个空字符串就可以了...不能传null;
    parts2.add(part);
    }
    Observable<BaseCode> observable = null;
    // Observable<BaseCode> observable= mRepositoryManager.obtainRetrofitService(VisitApi.class)
    // .changedMeetDetail(hashMap, parts1, parts2, parts3);
    return observable;
    }

  • 相关阅读:
    list1AndCompile
    pickle序列化2
    Servlet简单例子:输出当前日期
    Servlet简单例子:前后端通信
    Java 继承的简单例子
    Java 一个简单的距离工具类
    Java 私有静态成员变量的简单使用
    mysql数据类型
    使用Bootstrap简单案例——导航条+轮播图+模态框+表单
    K-means 聚类
  • 原文地址:https://www.cnblogs.com/awkflf11/p/12541221.html
Copyright © 2020-2023  润新知