正篇
通过对代码的阅读,工作中我用的应该是Retrofit2请求方法,如下: 首先先定义一个接口文件, get请求样式:
public interface Api { //get请求 @GET("user") //请求方法注解,get请求,括号内的是请求地址,Url的一部分 Call<ResponseBody> getData();//Call<*>返回类型,*表示接收数据的类,一般自定义 接口方法名称,括号内可以写入参数 }
post请求实例:
@POST("XXXX") @Headers({"Content-Type: application/x-www-form-urlencoded;charset=utf-8","CONNECT_TIMEOUT:20000", "READ_TIMEOUT:20000", "WRITE_TIMEOUT:20000"}) //定义头部 Call<ResponseBody> getXXXXXXX( @Body RequestBody requestBody );
我写的是用单例实现的:
//单例 private Retrofit2Manager() { retrofitMap = new ConcurrentHashMap<>(); client = new OkHttpClient.Builder(). connectTimeout(30, TimeUnit.SECONDS). readTimeout(30, TimeUnit.SECONDS). writeTimeout(30, TimeUnit.SECONDS). connectionPool(new ConnectionPool(5,30,TimeUnit.SECONDS)).build(); }
public <T> T getApi(Class<T> clz, String url) { if (retrofitMap.get(url) == null) { synchronized (retrofitMap) { if (retrofitMap.get(url) == null) { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .baseUrl(url) .client(client) .build(); retrofitMap.put(url, retrofit); } }
把我们需要的请求的url以及对应的结构体类传进去,然后再用:
Call<ResponseBody> call
去创建Call对象用于callback监听回调获取返回体从而拿到我们想要的返回值。
call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if(response.code()== HttpURLConnection.HTTP_OK){ if (response.body() == null) { return; } String jsonStr= null; try { jsonStr = response.body().string(); } catch (IOException e) { e.printStackTrace(); } ... } @Override public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {...} });
这样看起来应用还是蛮简单的,下一节我们将具体探讨retrofit的使用,本节为应用示例。
小结
在写文章的时候顿了很多次,因为我对这块研究还不是很深,代码不是特别熟练,所以后续还会深入探讨,展开去说说,顺便拓展其他请求方法。