Retrofit2的简单使用(一)
来源:互联网 发布:js 设置style display 编辑:程序博客网 时间:2024/05/18 17:44
Retrofit2的简单介绍
Retrofit 是Square开发的网络请求库, 从Retrofit2以后,其内部网络请求用的OKHttp,简化了网络请求的使用。Retrofit+RxJava可以完美地实现android的网络请求。
<一>Retrofit2的简单使用
android studio中,需要引入
compile 'com.squareup.retrofit2:retrofit:2.0.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.retrofit2:converter-scalars:2.0.0' compile 'com.squareup.retrofit2:converter-jackson:2.0.0'
其中converter-gson用于Gson解析, converter-scalars用于字符串解析, converter-jackson用于Jackson解析。
(1)定义一个接口,封装访问的方法
/** * * 网络请求 * * Created by jason on 16/7/27. */public interface ApiService { @GET("/demo") Call<String> getString(@Query("name") String name,@Query("pass") String pass);}
注解@GET表示这是一个GET请求,demo是请求名称(URL中请求部分的地址)。getString()是请求的方法名称,返回的是一个Call对象,泛型为String(即服务器返回数据是一个String),@Query("name")
和@Query("pass")
是请求参数 。如果请求参数比较多,也可以用@QueryMap HashMap<String,String> map
。
(2)执行请求
private static String baseUrl = "http://192.168.1.18:8080";//构建RetrofitRetrofit stringRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(ScalarsConverterFactory.create()) .build();ApiService apiService = stringRetrofit.create(ApiService.class);Call<String> call = apiService.getString(); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful() && response.errorBody() == null) { Log.d(TAG, "str:" + response.body().toString()); } else { Log.d(TAG, "error code:" + response.code()); Log.d(TAG, "error message:" + response.message()); } } @Override public void onFailure(Call<String> call, Throwable t) { Log.d(TAG, "error:" + t.getMessage()); } });
上述拼接成最终的网络请求地址是http://192.168.1.18:8080/demo
。如上述代码apiService.getString();
返回一个Call对象,接下来调用enqueue方法,enqueue()
方法表示异步请求,execute()
方法表示同步请求。onResponse()
和onFailure()
是请求结果回调。在onResponse()
中,首先需要判断下请求是否成功以及是否有错误信息,这里需要特别注意,单纯从字面上理解,onFailure()
才是接收错误的地方,异常都应该在onFailure()
中处理,但其实并不完全是这样,这里的onFailure()
是接收网络的异常,比如说网络没有连接,或者连接超时,这时会进入onFailure()
方法,但如果是网络正常,但是返回不正常,是会进入onResponse()
方法。
(3)服务器端的servlet
@WebServlet("/demo1")public class demo1 extends HttpServlet{ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); String returned ="Hello! android,I am Server!"; writer.write(returned); writer.flush(); writer.close(); } }
- <二>Retrofit2网络请求json的简单使用
如果Http返回数据是一个统一的格式,如下:
{ "status":0, "msg":"成功", "data":""}
其中data是不确定的,其有可能是一个对象,也有可能是一个List,故我们将其定义为泛型:
public class HttpResult<T> { /** * 服务端数据状态码,0(正常) */ private int status; /** * 服务端数据状态码对应的提示信息 */ private String msg; /** * 服务端数据的试题部分 */ private T data; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; }}
如果data是一个对象,请求接口如下:
/** * * 网络请求 * * Created by jason on 16/7/27. */public interface ApiService { @GET("/HttpServers/demo1") Call<HttpResult<User>> getUser();}
如果data是一个List,请求接口如下:
/** * * 网络请求 * * Created by jason on 16/7/27. */public interface ApiService { @GET("/HttpServers/demo") Call<HttpResult<List<Person>>> getUsers();}
- Retrofit2的简单使用(一)
- Retrofit2 简单的使用
- Retrofit2 的简单使用
- Retrofit2的简单使用
- Retrofit2的简单使用
- Retrofit2的简单用法(一)
- Retrofit2网络框架的使用(一)
- Retrofit2 的基本使用 (一)
- retrofit2.0的简单使用
- Retrofit2.0的简单使用
- Retrofit2.0的简单使用
- Retrofit2.0的简单使用
- Retrofit2.0详解(一简单使用)
- Retrofit2.0的简单使用 (包含Gson)
- RxJava2和Retrofit2.0的简单使用
- (一)Dagger2+retrofit2.0 的初次使用
- Retrofit2和RxJava2的使用介绍一
- Retrofit2简单使用
- 欢迎使用CSDN-markdown编辑器
- Window下使用虚拟机Ubuntu编译Ffmpeg(编译的只有arm平台下的)
- 7.29总结
- Linux线程-互斥锁pthread_mutex_t
- How to list and delete branches
- Retrofit2的简单使用(一)
- 两幅相同大小图像的相似程度的两个评价指标-PSNR和SSIM
- Java技术体系图
- Codeforces 478C Table Decorations【贪心】【思维】
- Android保存图片到系统图库
- Linux多进程多线程互斥同步例子
- C#扩展(2):Random的扩展
- js拼接json字符串
- Android ImageSpan与TextView中的text居中对齐问题解决(无论TextView设置行距与否)