之前项目的数据获取都是通过Okhttp来获取的,但是听说retrofit获取数据跟优越,就尝试使用retrofit在同样的数据接口上获取数据,由于是第一次所以走了很多弯路,现在做下记录方便自己或者大家以后直接使用,减少撞墙,节省开发时间。
使用Retrofit大概分为以下几个步骤:
1、首先的在build.gradle 中添加如下依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0' // 转换器 将结果通过gson将json串转换为model implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
2、创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); HttpJson httpJson = retrofit.create(HttpJson.class);//这是get请求的接口
请求中的完整路径是:http://login.xjymedia.com/api/Device/GetDeviceTime?device=device
HttpJson代码如下:
@GET("GetDeviceTime") Call<ResponseBody> getHaoMa(@Query("deviceId") String deviceId);//做的是原生数据请求,之前没有注意,只用其他方式,导致一直拿不到数据
3、发起网络请求
Call<ResponseBody> call = httpJson.getHaoMa("00000000116");//这里Call里面的内容必须与HttpJson内的Call内的一致 call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(@Nullable Call<ResponseBody> call, @NonNull Response<ResponseBody> response) { try { String jsonStr = new String(response.body().bytes());//把原始数据转为字符串 KLog.e("retrofit获取到的数据", jsonStr); jsonToObj(jsonStr);//这是对字符串数据解析具体数据方法 } catch (Exception e) { e.printStackTrace(); } } @Override public void onFailure(@NonNull Call<ResponseBody> call, Throwable t) { KLog.e("请求失败!", t.toString()); } }); }
这就完成了get方法的数据请求,写得不好的地方,欢迎大家指正。其他请求数据方式,后面学习了,在写新的博客。