初试Retrofit网络请求

1、Retrofit的简单介绍:

Retrofit是Square提供的开源框架,GitHub上的描述:Type-safe HTTP client for Android and Java by Square。采用注解,提供JSON TO POJO(简单java对象Plain Ordinary Java Object),POJO TO JSON,网络请求(GET,POST,DELETE,PUT等)的封装。

2、具体实现:

      1、创建项目,添加Retrofit库:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}

        

这里注意:

     1.上面的红色背景的依赖包,不要忘了,GitHub上的Retrofit的api里是没有加这个依赖包的,如果按照官网的api不加         converter-gson依赖包,如果想用GsonConverterFactory(gson来将json转为POJO)是编译不通过的


       2.添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

       2、创建请求接口

public interface GitApi {
    @GET("users/{user}")
    public Call<GitBeanUser> getGitUser(@Path("user") String user);
    
}
采用@Get注解,表明get请求的方式,而且是动态path,users/{user},{user}由注解@Path指定具体内容,Call<GitBeanUser>里的GitBeanUser是请求json返回之后,通过GsonConverterFactory转化为的Pojo对象


    3、创建Pojo对象GitBeanUser     
public class GitBeanUser {


    private String login;
    private String id;
    private String avatar_url;
    private String gravatar_id;
    private String url;
    private String html_url;
    private String followers_url;
    private String following_url;
    private String gists_url;
    private String starred_url;
    private String subscriptions_url;
    private String organizations_url;
    private String repos_url;
    private String events_url;
    private String received_events_url;
    private String type;
    private String site_admin;
    private String name;
    private String company;
    private String blog;
    private String location;
    private String email;
    private String hireable;
    private String bio;
    private String public_repos;
    private String public_gists;
    private String followers;
    private String following;
    private String created_at;
    private String updated_at;
}


    4、测试:创建Call请求数据  
    public void getGitData(View view){

        Log.e("onclickListener", "点击事件");

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        GitApi gitApi = retrofit.create(GitApi.class);
        Call<GitBeanUser> call = gitApi.getGitUser("octocat");
        call.enqueue(new Callback<GitBeanUser>() {
            @Override
            public void onResponse(Call<GitBeanUser> call, Response<GitBeanUser> response) {
                Log.e("getGitUser>>>>>", response.body().toString());
            }

            @Override
            public void onFailure(Call<GitBeanUser> call, Throwable t) {
                Log.e("getGitUser>>>>>>>", "not success");
            }
        });
    }

 
3、请求方法,可以看下官方api
  java接口里的每个Http请求方法,必须有一个Http注解和一个关联的url,Retrofit默认提供以下5中请求方式
  GET,POST,PUT,DELETE,HEAD,关联的url的一些请求参数可以在不同的注解之中配置
  1.直接配置固定url,不能动态改变
    @GET("users/list"):无请求参数
    @GET("users/list?sort=desc"):在url后直接拼接参数
  2.动态配置url,并添加参数
    请求的url可以动态的用代替的模块和方法中的参数去替换,一些url中需要动态配置的path或者动态改变请求参数
    url中需要动态改变的部分path可以用{and}大括号包起来,而对应的参数必须用@Path(and)注解标识,并且url的
    {}里的String与@Path(“and”)必须一样:
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
    添加查询参数:      
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
           多个查询参数,用map集合                 

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
      3.请求体

   可以用@Body注解,来将对象作为Http的请求体

@POST("users/new")
Call<User> createUser(@Body User user);
    对象可以被配置Retrofit对象时的POJO转化器,做相应的转化,如果Retrofit对象没有添加任何的Converter时,只能使用RequestBody,不能使用对象。

      4.表单
使用post提交表单数据,可以用@FormUrlEncoded注解来标识,方法用@Post("url")来标识,每个键值对,采用@Field(”key“)String value来标识     

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

         5.请求头

   用@Headers注解,来为请求方法配置请求头

@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
    多个header参数,用{ }包起来

@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);
    可以用@Header注解动态配置请求头header的值,对应的header参数必须在@Header("key”)之中提供,如果对应的header参数的value是null,那么这个header键值对将被忽略,否则,value的toString方法将被调用,结果作为该header参数对应的value值

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值