关闭

Retrofit 2.3使用随文笔录

标签: retrofit
52人阅读 评论(0) 收藏 举报
分类:
  • 首先创建一个接接口
public interface RetrofitInterface {
//    https://api.douban.com/v2/movie/coming_soon?count=1
    /**豆瓣开放平台:
     * 正常参数拼接
     * */
     //first:第一种
    @GET("movie/coming_soon")
    Call<MovieBean> getMovie (@Query("count") int count);

    /**
     * @param 可以把{in_theaters}单独取出来,调用getMovie1时,可以让用户自己传递进来
     * */
     //second:第二种
    @GET("movie/{in_theaters}")
    Call<WillBean> getMovie1 (@Path("in_theaters") String s, @Query("count") int count);

    /**
     * 传map
     * */
     //three:第三种
    @GET("movie/in_theaters")
    Call<MapBean> getMap (@QueryMap Map<String,String> map);

    /**
     * 请求头:静态添加
     * 实际项目中一个一个接请求头太麻烦可,需要动态配置
     * 我公司真实项目的url地址
     * */
     * //这里的"userid:2820","appsign:1E0C31744A02922BB4B5EA98644A590738"}已改成错的了(公司的怕出啥问题)
    @Headers({"userid:282220","appsign:1E0C31744A02922BB4B5EA98644A59073811"})
    @POST("index/list.do")
    Call<HomeDataMolde> addHeader (@QueryMap Map<String,String> map);

    /*
    * 请求头:动态添加
    *  我公司真实项目的url地址
    * **/
    //four:第四种
    @POST("index/list.do")
    Call<HomeDataMolde> addHeader1 (@QueryMap Map<String,String> map);

}
  • 有请求头和无请求头抽成了两个方法,方便使用
/**无请求头*/
 public static RetrofitInterface retrofitGet() {
        Retrofit builder = new Retrofit.Builder()
                .baseUrl("https://api.douban.com/v2/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RetrofitInterface retrofitInterface = builder.create(RetrofitInterface.class);
        return retrofitInterface;
    }
 /**
     * 有请求头的
     */
    public static RetrofitInterface retrofitGetAddHead() {
        /**
         * 配置请你求球头
         * */
        //添加拦截器
        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                Request.Builder builder = request.newBuilder();
                //这里userid  appsign 也改成错的了
                Request build = builder.addHeader("userid", "282220")
                        .addHeader("appsign","1E0C31744A02922BB4B5EA98644A59073811")
                        .build();
                return chain.proceed(build);
            }
        }).retryOnConnectionFailure(true)//客户端出现连接性问题时,进行重试
                .build();

        /**
         * addCallAdapterFactory 影响的是 :  Call<HomeDataMolde> addHeader (@QueryMap Map<String,String> map);
         * Call 默认支持的  要想支持Observable  就需要添加addCallAdapterFactory
         * */
        Retrofit builder = new Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl("http://116.62.120.127:8085/")
                .addConverterFactory(GsonConverterFactory.create())
//                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        RetrofitInterface retrofitInterface = builder.create(RetrofitInterface.class);
        return retrofitInterface;
    }
  • first:第一种
  /**
     *参数作为url的一部分:正常请求(url传参拼接)"
     * */
    public void gethttp(View view) {
        RetrofitUtils.retrofitGet()
                .getMovie(2)
                .enqueue(new Callback<MovieBean>() {
                    @Override
                    public void onResponse(Call<MovieBean> call, Response<MovieBean> response) {
                        tv.setText(response.body().getSubjects().get(1).getTitle());
                        Log.e("Retrofit", response.toString());
                        Log.e("gethttp", response.body().getSubjects().toString());
                    }

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

                    }
                });

    }

Log日志:
这里写图片描述

  • second:第二种
/**
     * url:参数拼接  in_theaters用户传递
     * */
    public void getWillStart(View view) {
        RetrofitUtils.retrofitGet()
                .getMovie1("in_theaters",3)
                .enqueue(new Callback<WillBean>() {
                    @Override
                    public void onResponse(Call<WillBean> call, Response<WillBean> response) {
                        Log.e("in_theaters", response.toString());
                        Log.e("第二种:电影名字getWillStart", response.body().getSubjects().get(2).getTitle());
                    }

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

                    }


                });
    }

Log日志:
这里写图片描述

  • three:第三种

    /**
     * 传递map
     * */
    public void getMap(View view){
        subjects1.clear();
        Map<String,String> map=new HashMap<>();
        map.put("count",String.valueOf(12));
        RetrofitUtils.retrofitGet()
                .getMap(map)
                .enqueue(new Callback<MapBean>() {
                    @Override
                    public void onResponse(Call<MapBean> call, Response<MapBean> response) {
                        Log.e("map", response.toString());
                        MapBean body = response.body();
                        List<SubjectsBean> subjects = body.getSubjects();
                        for (int i=0;i<subjects.size();i++){
                            subjects1.add(subjects.get(i));
                            Log.e("列表集合", subjects1.size()+"...");
                        }
                        Message msg=new Message();
                        msg.what=REGRESH;
                        msg.obj=subjects1;
                        mHandler.sendMessage(msg);
                    }

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

                    }
                });
    }

log日志:
这里写图片描述

  • four:第四种
 /**
     * 添加header
     * */
    public void addHeader(View view){
        final Map<String,String>map=new HashMap<>();
        map.put("showType","0");
        map.put("pageIndex",String.valueOf(1));
        map.put("pageSize",String.valueOf(10));
        RetrofitUtils.retrofitGetAddHead()
                .addHeader1(map)
                .enqueue(new Callback<HomeDataMolde>() {
                    @Override
                    public void onResponse(Call<HomeDataMolde> call, Response<HomeDataMolde> response) {
                        Log.e("Retrofit请求的url", response.toString());
                        Log.e("Retrofit1000请求成功", response.body().getCode()+".......");
                        List<HomeDataMolde.DataBean> data = response.body().getData();
                        Log.e("Retrofit集合数据长度:", data.size()+".......");
                        Log.e("Retrofit_getNickname", data.get(2).getUserModel().getNickname()+".......");

                    }

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

                    }
                });
    }

Log日志:
这里写图片描述

本文没什么讲解,主要是本人学习时的随文笔记!这个框架只需要会用就可以了,没必要非得研究他的原理!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19210次
    • 积分:672
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:3篇
    • 译文:0篇
    • 评论:6条