zoukankan      html  css  js  c++  java
  • Android使用jsonstring请求retrofit

    参考链接:https://www.jianshu.com/p/1e5200898c7b

    public void request(String jsonStr, ApiSucess sucess, ApiErr err) {
            try {
                JSONObject obj = new JSONObject(jsonStr);
                String url = obj.getString("url"); //   http://www.shabi.com/getinfo
                String method = obj.getString("method").toLowerCase();
                JSONObject data = obj.getJSONObject("data");
    
                SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
                String token = sp.getString("Authorization", "12345678");
    
                OkHttpClient okHttpClient = new OkHttpClient.Builder()
                        .addInterceptor(new Interceptor() {
                            @Override
                            public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
                                Request original = chain.request();
                                Request.Builder requestBuilder = original.newBuilder()
                                        .header("Authorization", token)
                                        .method(original.method(), original.body());
                                Request request = requestBuilder.build();
                                return chain.proceed(request);
                            }
                        })
                        .connectTimeout(5, TimeUnit.SECONDS) // 超时 10s
                        .build();
    
                Retrofit retrofit = new Retrofit.Builder()
    //                    .baseUrl(baseUrl)
                        .baseUrl(getBaseUrl(url))
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                Server server = retrofit.create(Server.class);
                Call<ResponseBody> call;
                if (method.contains("get")) {
                    Map<String, String> queryMap = new HashMap<>();
                    Iterator<String> keys = data.keys();
                    while (keys.hasNext()) {
                        String key = keys.next();
                        queryMap.put(key, data.get(key).toString());
                    }
                    call = server.reqGet(getApiUri(url), queryMap);
                    enqueueMethod(call, sucess, err);
                } else if (method.contains("post")) {
                    RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
                    call = server.reqPost(getApiUri(url), body);
                    enqueueMethod(call, sucess, err);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private String getBaseUrl(String url) {
            String baseUrl;
            if (url.startsWith("http")) {
                int f = url.indexOf("//") + 2;
                String noHttp = url.substring(f);
                int i = noHttp.indexOf("/");
                int subIndex = f + i;
                baseUrl = url.substring(0, subIndex);
                String afterUri = url.substring(subIndex);
            } else {
                //  api.freego.haitiand.cn/travelcard/bindCard
                int i = url.indexOf("/");
                baseUrl = url.substring(0, i);
            }
            if(!baseUrl.contains("http")){
                baseUrl = "http://"+baseUrl ;
            }
            Log.i(TAG, "原生 baseUrl = " + baseUrl);
            return baseUrl;
        }
    
        private String getApiUri(String url) {
            String afterUri;
            if (url.startsWith("http")) {
                int f = url.indexOf("//") + 2;
                String noHttp = url.substring(f);
                int i = noHttp.indexOf("/");
                int subIndex = f + i;
                String baseUrl = url.substring(0, subIndex);
                afterUri = url.substring(subIndex);
            } else {
                //  api.freego.haitiand.cn/travelcard/bindCard
                int i = url.indexOf("/");
                afterUri = url.substring(i);
            }
            Log.i(TAG, "原生 afterUri = " + afterUri);
            return afterUri;
        }
    public interface Server {/*
        *   下边两个函数是对于Web调用的
        */
        @POST
        Call<ResponseBody> reqPost(@Url String url, @Body RequestBody requestBody);
    
        @GET
        Call<ResponseBody> reqGet(@Url String url, @QueryMap Map<String, String> queryMap);
    
    }
  • 相关阅读:
    在未排序的数组中找到第 k 个最大的元素
    区域和检索
    控制台画图程序(可更换笔刷版本)
    循环中的scanf处理了换行符怎么破
    strlen获取字符数组为什么是255
    宽字符输出中文,Devc++解决方法
    区间取最小值最大值-位值和
    模拟鼠标键盘-封装函数
    scanf("%d",a[i]+j)为什么不加取地址符号
    scanf需要多输入一行是什么问题
  • 原文地址:https://www.cnblogs.com/Oldz/p/13438415.html
Copyright © 2011-2022 走看看