美文网首页
Retrofit 2.0基本使用方法

Retrofit 2.0基本使用方法

作者: Whyn | 来源:发表于2017-03-07 22:05 被阅读473次

    简介:

    Retrofit是目前最流行的HTTP请求工具。

    使用方法

    1.添加依赖:

    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    

    2.具体操作步骤:

    现假设要访问网页:https://androidtutorialpoint.com/api/RetrofitAndroidObjectResponse
    ,其返回的JSON数据如下所示:
    {
    "StudentId":"1",
    "StudentName":"Rahul",
    "StudentMarks":"83"
    }
    则使用Retrofit获取该网页返回的JSON数据的具体步骤如下:

    • 定义一个接口,Retrofit会将该接口转换成为HTTP请求
    public interface StudentRequestService{
        @GET("api/RetrofitAndroidObjectResponse")
         Call<ResponseBody>  obtainStudentInfo();
    }
    
    
    • 发起HTTP请求,获取结果
    //创建一个Retrofit客户端
      Retrofit retrofit = new Retrofit.Builder()
              .baseUrl("https://www.androidtutorialpoint.com/")
              .build();
    
      //得到一个StudentRequestService代理对象
      StudentRequestService studentRequestServiceProxy = retrofit.create(StudentRequestService.class);
    //生成一个HTTP请求
      Call<ResponseBody> studentInfo = studentRequestServiceProxy.obtainStudentInfo();
      //最后,就可以通过studentInfo对象获取WebServer内容
      //此处有两种请求方法:同步调用,异步调用
      //这里使用的是异步调用方法
      studentInfo.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    Log.i(TAG,response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.i(TAG, "onFailure: "+t);
            }
        });
    

    ** result: **


    Retrofit访问WebServer返回的结果

    进阶用法

    上面方法获取到的是JSON数据,还要经过手动进一步解析才能获取所需内容,
    而Retrofit默认只能解码HTTP bodies到 OkHttp's ResponseBody类型,要想使
    Retrofit支持其他类型转换,必须通过Converters(数据转换器)转换。
    由于我们需要获取的是Student的信息,那么我们可以创建一个Student的POJO类,
    然后通过GsonConverter进行转换,就可以避免手动解析JSON了,具体做法如下:

    • 添加Gson依赖:
     compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    
    • 创建POJO类:
      通过jsonschema2pojo这个网站可以快捷方便生成所需Bean类。
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Student {
    
        @SerializedName("StudentId")
        @Expose
        private String studentId;
        @SerializedName("StudentName")
        @Expose
        private String studentName;
        @SerializedName("StudentMarks")
        @Expose
        private String studentMarks;
    
        public String getStudentId() {
            return studentId;
        }
    
        public void setStudentId(String studentId) {
            this.studentId = studentId;
        }
    
        public String getStudentName() {
            return studentName;
        }
    
        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }
    
        public String getStudentMarks() {
            return studentMarks;
        }
    
        public void setStudentMarks(String studentMarks) {
            this.studentMarks = studentMarks;
        }
    
        @Override
        public String toString() {
            return String.format("id:%s\nname:%s\nmarks:%s", studentId, studentName, studentMarks);
        }
    }```
    
    * 定义一个接口,Retrofit会将该接口转换成为HTTP请求
    
    ```java
    public interface StudentRequestService{
        @GET("api/RetrofitAndroidObjectResponse")
         Call<Student>  obtainStudentInfo();
    }
    
    
    • 发起HTTP请求,获取结果
    
      //创建一个Retrofit客户端
      Retrofit retrofit = new Retrofit.Builder()
              .baseUrl("https://www.androidtutorialpoint.com/")
              //增加Gson转换
              .addConverterFactory(GsonConverterFactory.create())
              .build();
    
      //得到一个StudentRequestService代理对象
      Interfaces.StudentRequestService studentRequestServiceProxy = retrofit.create(Interfaces.StudentRequestService.class);
    //生成一个HTTP请求
      Call<Student> studentInfo = studentRequestServiceProxy.obtainStudentInfo();
      studentInfo.enqueue(new Callback<Student>() {
          @Override
          public void onResponse(Call<Student> call, Response<Student> response) {
              Student student = response.body();
              Log.i(TAG, student.toString());
          }
    
          @Override
          public void onFailure(Call<Student> call, Throwable t) {
              Log.i(TAG, "onFailure: " + t);
          }
      });
    

    ** result: **


    resultGson.png

    ** 最后的最后,千万不要忘记在AndroidManifest.xml中加入权限:**

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

    相关文章

      网友评论

          本文标题:Retrofit 2.0基本使用方法

          本文链接:https://www.haomeiwen.com/subject/iwjvgttx.html