参考链接: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); }