第一步:添加依赖
compile 'com.google.code.gson:gson:2.3'
compile 'com.squareup.retrofit:retrofit:retrofit.0-beta1'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
compile 'com.squareup.okhttp:okhttp:2.4.0'
因为Retrofit2.0封装的是okhttp所有也要添加ok的依赖
第二步:添加网络权限
第三步:创建一个接口用来描述网络请求
以上我们的准备工作就完成了下面开始正式写代码
我们要知道Retrofit把 网络请求的URL 分成了两部分设置:
这里用一个GET请求来举个栗子
// 第1部分:在网络请求接口的注解设置
@GET("/users/Guolei1130") CallgetLohinInfo();
// 第2部分:在创建Retrofit实例时通过.baseUrl()设置
Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://120.27.23.105") //设置网络请求的Url地址 .addConverterFactory(GsonConverterFactory.create())//设置数据解析器 .build();下面介绍GET的请求
@GET("users/{username}") Call这里的user的值将赋给上面的{username}getLogin(@Path("username") String user);
这两是一个有参数一个没有参数 还有大家可能注意到了Call<这里的泛型不一样>因为 retrofit 2.0可以直接返回一个bean类的实体如果你没有bean类的话就可以放入 ResponseBody返回的是请求下来的json字符串
然后使用retrofit来调用create传入你之前定义的接口
APIInterface apiInterface = retrofit.create(APIInterface.class);
请求结果分别为
Callcall = immortal.getLohinInfo(); call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { try { Toast.makeText(MainActivity.this,response.body().string()+"",Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onFailure(Call call, Throwable t) { } });
Call= immortal.getLogin("Guolei1130"); call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { Toast.makeText(MainActivity.this,response.body().getId()+"",Toast.LENGTH_SHORT).show(); } @Override public void onFailure(Call call, Throwable t) { } });
然后说一下POST的实现
POST的实现在这里见到介绍两种好用的
//http://120.27.23.105/product/getProductCatagory?cid=2(这个网址可以使用) @POST("/onebox/basketball/nba") @FormUrlEncoded CallgetCall( @Field("key") String k); @POST("/product/getProductCatagory") @FormUrlEncoded Call getCalls(@FieldMap Map , Object> args);
// 具体使用 // @Field Call最后是发送网络请求call1 = service.testFormUrlEncoded1("2"); // @FieldMap // 实现的效果与上面相同,但要传入Map Map , Object> map = new HashMap<>(); map.put("cid", "2"); Call call2 = service.testFormUrlEncoded2(map);
//发送网络请求(异步) call.enqueue(new Callback以上是Retrofit2.0的简单实现() { //请求成功时回调 @Override public void onResponse(Call call, Response response) { //请求处理,输出结果 response.body().show(); } //请求失败时候的回调 @Override public void onFailure(Call call, Throwable throwable) { System.out.println("连接失败"); } }); // 发送网络请求(同步) Response response = call.execute();
如果各位还想更深入了解给大家推荐两个网址
http://blog.csdn.net/carson_ho/article/details/73732076
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1016/3588.html