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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理