Andorid基础知识——Retrofit的基本使用

Posted ABded

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Andorid基础知识——Retrofit的基本使用相关的知识,希望对你有一定的参考价值。

文章目录

1.Retrofit是什么

Retrofit主要是对android网络请求的框架进行封装,底层基于OkHttp。

换句话说,网络请求的本质还是OkHttp完成,而Retrofit仅负责网络请求接口的封装。

主要是使用Retrofit接口封装请求参数,header头部,Url信息等,然后交给OkHttp完成后续的网络请求,当服务端返回数据时,OkHttp又将返回的原始数据交给Retrofit,Retrofit再根据需求解析数据。

简单明了的讲,Retrofit主要是对网络请求进行了封装。

2.Retrofit的使用

Retrofit官方文档
Retrofit Github

注:以下以访问词霸api为例,URL为“http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world”

2.1添加依赖

  • 在app包下的build.gradle中
dependencies 
    implementation 'com.squareup.retrofit2:retrofit:2.6.1'//Retrofit库
    implementation 'com.squareup.retrofit2:converter-gson:2.6.1'//GSON解析

  • 添加网络权限
<uses-permission android:name="android.permission.INTERNET" />

2.2创建接收服务器返回数据的类

可以使用GsonFormat生成对应的Java Bean类,倘若不了解GsonFormat可以移步这里

//json数据

  "status":1,
  "content":
    "from":"en",
    "to":"zh-CN",
    "vendor":"ciba",
    "out":" 你好,世界",
    "ciba_use":"来自机器翻译。",
    "ciba_out":"",
    "err_no":0
  

//对应的java bean类
public class TranslationBean 
   
    private int status;
    private ContentBean content;

    public int getStatus() 
        return status;
    

    public void setStatus(int status) 
        this.status = status;
    

    public ContentBean getContent() 
        return content;
    

    public void setContent(ContentBean content) 
        this.content = content;
    

    public static class ContentBean 

        private String from;
        private String to;
        private String vendor;
        private String out;
        private String ciba_use;
        private String ciba_out;
        private int err_no;

        public String getFrom() 
            return from;
        

        public void setFrom(String from) 
            this.from = from;
        

        public String getTo() 
            return to;
        

        public void setTo(String to) 
            this.to = to;
        

        public String getVendor() 
            return vendor;
        

        public void setVendor(String vendor) 
            this.vendor = vendor;
        

        public String getOut() 
            return out;
        

        public void setOut(String out) 
            this.out = out;
        

        public String getCiba_use() 
            return ciba_use;
        

        public void setCiba_use(String ciba_use) 
            this.ciba_use = ciba_use;
        

        public String getCiba_out() 
            return ciba_out;
        

        public void setCiba_out(String ciba_out) 
            this.ciba_out = ciba_out;
        

        public int getErr_no() 
            return err_no;
        

        public void setErr_no(int err_no) 
            this.err_no = err_no;
        
    
	//定义输出返回数据的方法
    public void show()
        Log.e("翻译",content.out);
    

2.3创建用于描述网络请求的接口

public interface TransApi 
    @GET("ajax.php?a=fy&f=auto&t=auto&w=hi%20world")
    Call<TranslationBean> getCall();
    // @GET注解的作用:采用Get方法发送网络请求
    // getCall() = 接收网络请求数据的方法
    // 其中返回类型为Call<*>,*是接收数据的类(即上面定义的TranslationBean类),返回这个类的对象

2.4创建Retrofit实例

Retrofit retrofit=new Retrofit.Builder()
        .baseUrl("http://fy.iciba.com/")//网络请求的url地址
        .addConverterFactory(GsonConverterFactory.create())//数据解析器,解析json
        .build();

2.5创建网络请求接口实例

//创建网络请求接口的实例
TransApi request=retrofit.create(TransApi.class);

//对发送请求进行封装
Call<TranslationBean> call=request.getCall();

2.6发送网络请求

//发送网络请求(异步)
call.enqueue(new Callback<TranslationBean>() 
	//请求成功时调用
    @Override
    public void onResponse(Call<TranslationBean> call, Response<TranslationBean> response) 
        response.body().show();
    
    
    //请求失败时调用
    @Override
    public void onFailure(Call<TranslationBean> call, Throwable t) 
        Log.e("MainActivity","连接失败");
    
);
//发送网络请求(同步)
try
    Response<TranslationBean> response=call.execute();
 catch (Exception e)
    e.printStackTrace();
;

2.7处理返回数据

//发送网络请求(异步)
call.enqueue(new Callback<TranslationBean>() 
	
    @Override
    public void onResponse(Call<TranslationBean> call, Response<TranslationBean> response) 
        response.body().show();//处理返回数据,这里是显示返回数据
    
    

    @Override
    public void onFailure(Call<TranslationBean> call, Throwable t) 
        Log.e("MainActivity","连接失败");
    
);
//发送网络请求(同步)
try
    Response<TranslationBean> response=call.execute();
    response.body().show();//处理返回数据,这里是显示返回数据
 catch (Exception e)
    e.printStackTrace();
;

以上是关于Andorid基础知识——Retrofit的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit2:如何使授权令牌标头动态化?

Andorid开发中遇到的问题

Android 网络请求框架之Retrofit 的 详细使用

Android 网络请求框架之Retrofit 的 详细使用

Android 网络请求框架之Retrofit 的 详细使用

Android 网络请求框架之Retrofit 的 详细使用