retrofit_getjsonobjet('header').getstring("errmsg")_BugSarnath的博客-程序员秘密

技术标签: android 基础  

Retrofit

一.引入依赖

  implementation 'com.squareup.retrofit2:retrofit:2.7.1'
  implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
  implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'

1.0

首先创建我们的接口

public interface API {
    // get方法  Call<实体类> 接口名
    @GET("get/text")
    Call<JsonResultBean> getJson();

    // 带参数的,如果是参数少可以用@Query("参数名") String 参数值
    @GET("/get/param")
    Call<GetWithParamsBean> getWithParams(@Query("keyword") String keyword,
                                          @Query("page") int page,
                                          @Query("order") String order);
    // 如果参数多可以用QueryMap  
    @GET("/get/param")
    Call<GetWithParamsBean> getWithParams(@QueryMap Map<String,Object> params);

    // post
    @POST("/post/string")
    Call<PostWithParamsBean> postWithParams(@Query("string") String content);

    // post
    @POST
    Call<PostWithParamsBean> postWithUrl(@Url String url);

    // postJsonObject 传递对象  PostWithJsonObjectBean
    @POST("/post/comment")
    Call<PostWithJsonObjectBean> postJsonObjet(@Body CommentItemBean itemBean);

    // 上传文件,文件可以包括 图片 、 视频、音频 @Part注解,要跟@Multipart注解一起使用
    @Multipart
    @POST("/api/AppAniImgType/UploadToAliyun")
    Call<FileUploadResult> postFile(@HeaderMap Map<String,Object> headers,@Part MultipartBody.Part file);
    }
    

1.1

##新建一个单例功我们所有页面使用的网络请求-包含我们的baseUrl

public class RetrofitManager {
    // 我们的baseUrl
    public static String BASE_URL="http://xxxxx/";

    //设置超时时间
    public static final int CONNECT_TIME_OUT = 100000;
    private static RetrofitManager sRetrofitManager = null;
    private Retrofit mRetrofit;

    private RetrofitManager() {
        createRetrofit();
    }

    private void createRetrofit() {
        //设置一下okHttp的参数
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(CONNECT_TIME_OUT, TimeUnit.MILLISECONDS)

                .build();
        mRetrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())// 转换器直接转换成了bean类
                .build();
    }

    public static RetrofitManager getInstance() {
        if (sRetrofitManager == null) {
            synchronized (RetrofitManager.class) {
                if (sRetrofitManager == null) {
                    sRetrofitManager = new RetrofitManager();
                }
            }
        }
        return sRetrofitManager;
    }

    public Retrofit getRetrofit() {
        return mRetrofit;
    }

}

##二. 在我们的页面中使用

    private API mApi;
    
    在onCreate()方法中调用
    mApi = RetrofitManager.getInstance().getRetrofit().create(API.class);
    
    /*
    * get方法请求网路
    * */
    public void getClickRequest(View view) {
        Call<JsonResultBean> task = mApi.getJson();
        task.enqueue(new Callback<JsonResultBean>() {
            @Override
            public void onResponse(Call<JsonResultBean> call, Response<JsonResultBean> response) {
                Log.i(TAG, "onResponse:----> " + response.code());
                if (response.code() == HttpURLConnection.HTTP_OK) {
                    JsonResultBean resultBean = response.body();
                    updateList(resultBean);
                }
            }

            @Override
            public void onFailure(Call<JsonResultBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });
    }
     /**
     * 带参数的请求
     */
    public void getClickParams(View view) {
        Call<GetWithParamsBean> task = mApi.getWithParams("大家好", 10, "10");
        task.enqueue(new Callback<GetWithParamsBean>() {
            @Override
            public void onResponse(Call<GetWithParamsBean> call, Response<GetWithParamsBean> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (response.code() == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<GetWithParamsBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });
    }
     /**
     * 带参数的用QueryMap
     */
    public void getClickParamsQueryMap(View view) {
        Map<String, Object> params = new HashMap<>();
        params.put("keyword", "搜索关键字");
        params.put("page", 10);
        params.put("order", "0");
        Call<GetWithParamsBean> task = mApi.getWithParams(params);
        task.enqueue(new Callback<GetWithParamsBean>() {
            @Override
            public void onResponse(Call<GetWithParamsBean> call, Response<GetWithParamsBean> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (response.code() == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<GetWithParamsBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });
    }
     /**
     * 带参数的用QueryMap
     */
    public void getClickParamsQueryMap(View view) {
        Map<String, Object> params = new HashMap<>();
        params.put("keyword", "搜索关键字");
        params.put("page", 10);
        params.put("order", "0");
        Call<GetWithParamsBean> task = mApi.getWithParams(params);
        task.enqueue(new Callback<GetWithParamsBean>() {
            @Override
            public void onResponse(Call<GetWithParamsBean> call, Response<GetWithParamsBean> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (response.code() == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<GetWithParamsBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });
    }
    
      /*
     * post请求,body携带字符串内容(json)
     * */
    public void postJsonObject(View view) {
        CommentItemBean itemBean = new CommentItemBean();
        itemBean.setArticleId("123456");
        itemBean.setCommentContent("这是我提交测试的评论内容...");
        // PostWithJsonObjectBean 也可以通过对象形式拿返回值
        Call<PostWithJsonObjectBean> task = mApi.postJsonObjet(itemBean);
        task.enqueue(new Callback<PostWithJsonObjectBean>() {
            @Override
            public void onResponse(Call<PostWithJsonObjectBean> call, Response<PostWithJsonObjectBean> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (code == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<PostWithJsonObjectBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });
    }
 /*
     * 拦截器的使用
     * */
    public void postJsonObject2(View view) {
        CommentItemBean itemBean = new CommentItemBean();
        itemBean.setArticleId("123456");
        itemBean.setCommentContent("这是我提交测试...");

        OkHttpClient.Builder okhttpClient = new OkHttpClient.Builder();
        HttpLoggingInterceptor looger = new HttpLoggingInterceptor();
        looger.setLevel(HttpLoggingInterceptor.Level.BODY);
        // 只在开发版本中才会记录
        if (BuildConfig.DEBUG) {
            okhttpClient.addInterceptor(looger);
        }
        okhttpClient.addInterceptor(looger);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(RetrofitManager.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())// 转换器直接转换成了bean类
                .client(okhttpClient.build())
                .build();
        API service = retrofit.create(API.class);
        Call<PostWithJsonObjectBean> call = service.postJsonObjet(itemBean);
        call.enqueue(new Callback<PostWithJsonObjectBean>() {
            @Override
            public void onResponse(Call<PostWithJsonObjectBean> call, Response<PostWithJsonObjectBean> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (code == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<PostWithJsonObjectBean> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });

    }
     File file = new File("/storage/emulated/0/Download/1.jpg");
        if (!file.exists()) {
            Toast.makeText(RetrofitActivity.this, "该文件不存在", Toast.LENGTH_SHORT).show();
            return;
        }
        MediaType mediaType = MediaType.parse("image/*");
        RequestBody fileBody = RequestBody.create(mediaType, file);
        // MultipartBody.Part  和后端约定好Key,这里的partName是用file
        MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), fileBody);
        // 添加描述
//        String descriptionString = "hello, 这是文件描述";
//        RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);
        HashMap<String,Object> hashMap = new HashMap<>();
        hashMap.put("authToken","08c958df-187f-4e11-973b-3495a8e8e0ae");
        hashMap.put("appKey","6f9f7cfd-a92d-45a0-8e4a-d2aa96b84b27");
        Call<FileUploadResult> task = mApi.postFile(hashMap,part);
        task.enqueue(new Callback<FileUploadResult>() {
            @Override
            public void onResponse(Call<FileUploadResult> call, Response<FileUploadResult> response) {
                int code = response.code();
                Log.i(TAG, "onResponse:----> " + code);
                if (code == HttpURLConnection.HTTP_OK) {
                    Log.i(TAG, "onResponse:---->" + response.body());
                }
            }

            @Override
            public void onFailure(Call<FileUploadResult> call, Throwable t) {
                Log.i(TAG, "onFailure: ---->" + t.toString());
            }
        });

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lyfaxt/article/details/103909859

智能推荐

SpringBoot导出xlsx_springboot导出xlsx文件_兰陵指月的博客-程序员秘密

在SpringBoot 项目中,使用Hutool或者原生POI导出xlsx,工具类随笔

Arduino简单实例十一_四脚三色LED灯_arduino四脚led灯环 电路连接图_xieyan0811的博客-程序员秘密

1)       说明:LED灯是发光二级管,反着接电阻无穷大,正着接不需要考虑电阻。一般小的LED灯可通过的最大电流为30mA,如电压为5V,加一个220欧电阻后,电流约22mA左右,则可以保证不烧坏LED。另外,控制明暗需要接Arduino的PWM口(数字前带~的)2)       硬件:四脚三色LED灯,面包板,电阻220欧三只,Arduino uno,杜邦线3)    

webview 模拟点击_Android如何基于坐标对View进行模拟点击事件详解_杨小乱的博客-程序员秘密

前言大家应该都知道,在Android中,我们对于View进行模拟点击事件,很容易,比如调用View.performClick即可。但是有些时候,我们想要更加精细的点击,比如View的某一区域或者某一点进行点击。比如下面的例子。上面是一个WebView加载了一个视频,我们必须手动点一下播放按钮才能让视频播放,当然我们想要的最好是如下的自动播放效果(进入界面后,自动播放视频)当然方法有很多,比如通过j...

NetAdvantage专区 (第三方控件 infragistics)_lee576的博客-程序员秘密

http://www.cnblogs.com/tintown/category/13064.html 

SpringCloud Eureka项目启动子项目报错Connection refused: connect Cannot execute request on any known server_Frank_DuLei的博客-程序员秘密

SpringCloud Eureka项目启动子项目报错Connection refused: connect Cannot execute request on any known server

使用java的split()方法时,需要转义才能使用的几个字符_split哪些字符需要转义_现役码农一个的博客-程序员秘密

之前项目出现返回时间里面多了一个&quot;.0&quot;,最开始直接使用split(&quot;.&quot;),发现不能得到正确的结果。进一步调试发现需要进行转义才行。=.=查找了一下原因,在正则表达示中有使用到的字符,在使用时要进行转义处理。查看了一下正则表达式,来自百度。 元字符 描述 \ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。...

随便推点

科班和非科班都适用的 Java 学习路线_George_Fal的博客-程序员秘密

很多面试官在基础考察的时候都是直接是根据书来问,因为这些面试官也是从学生时代过来的,而他们可能和你看的是同一本书。也就是如果你和面试官的知识体系结构一样的话,面试官问出来的问题,你自然可以回答得很好。下面是书籍推荐:#00 推荐 《head first Java》head first系列一直口碑不错,这本书更是适合java入门,先看完这本书,然后看下面的这些。或者看《疯狂java讲义》,两者...

真正技术高手是如何炼成的?_weixin_34417200的博客-程序员秘密

在由CSDN和《程序员》杂志联合举办的第三届中国软件技术英雄会(上海站)上,由主持人CSDN首席分析师孟岩,上海群硕大中华区软件开发总监邵荣,阿里软件技术总监叶伟,盛大游戏首席技术官朱继盛, 趋势科技(中国)有限公司技术总监蔡昇钦,巨人网络集团首席技术官CTO宋仕良,淘宝网首席架构师王文彬共同参与的CTO论坛上,就有关CTO是否必须为技术高手,从程序员到技术高手成长之路,知名互联网公司如何招聘人才...

什么是信息熵?_简述什么是信息熵, 信息熵的测量。_张可_的博客-程序员秘密

1948 年,伟大的信息论之父**香农(Shannon)**将热力学中熵的概念引入到了信息论中,提出了“信息熵”这一概念。信息熵用于解决信息的量化问题,将原本模糊的信息概念进行计算得出精确的信息熵值,信息熵是描述消息中,不确定性的值。理解起来需要一点耐心,可以先这么说,信息熵就是用来描述信息中不确定性的值,熵越低,不确定性越低,我们也就更容易得到确定的信息。举个栗子,张三的女朋友小红又要过生日了,他现在挑选礼物有三个选择:口红、包、机械键盘。张三并不知道小红到底喜欢那种礼物,因此对于张三来说,小红喜欢

Android—Toast 相关工具类_林伟茂的博客-程序员秘密

/** * Tooast相关工具类 */public class ToastUtils { private static final int COLOR_DEFAULT = 0xFEFFFFFF; private static final String NULL = "null"; private static IToast iToast; private static int sGravity = -1; private static int sXOffse

vue:路由菜单刷新高亮_antd-vue 刷新时保持当前路由高亮_帅帅哥的兜兜的博客-程序员秘密

很多人遇到了路由高亮的问题。问为什么页面一刷新进来当前页就不不高。刷新的时候也没有记录状态。其实就是路由没有记录。。。我们想要实现的效果是:1、这里用的是 Element UI 。先把菜单封装。请看上面的文章:https://blog.csdn.net/u013592575/article/details/1034938652、element UI 中 NavMenu 有一个 d...

推荐文章

热门文章

相关标签