Android网络编程(二)- 简要记录Retrofit的使用

osc_u1w6ntu7 2021-01-21 10:17:40
Android Okhttp Retrofit gson gsonformat


Android网络编程(二)

初识Retrofit网络框架,简要记录一下使用流程:

我理解的Retrofit

Retrofit网络框架,本质上来说还是之前介绍过的OkHttp框架,Retrofit是对其进行了一层封装,通过注解来配置网络请求参数,支持同步异步,而且有方法直接在UI线程更新界面;

Retrofit使用流程

1.首先要添加Retrofit相关的依赖;
2.根据API或者网络请求返回地数据建立数据解析类,我们这里用的是GSON解析;
3.创建Retrofit用于进行网络请求的接口;
4.新建Retrofit实例,传入参数;
5.实例化接口,用Retrofit实例进行create();
6.实例化Call<>,配置网络请求参数;
7.发送网络请求;





OVER!!!OVER!!!


接下来就一步一步实现吧:

1.添加相关依赖:

 //Retrofit库
compile 'com.squareup.retrofit2:retrofit:2.0.2'
//OkHttp库
compile 'com.squareup.okhttp3:okhttp:3.1.2'
//Retrofit对应版本Gson库
compile 'com.squareup.retrofit2:converter-gson:2.0.2'

2.创建接收数据实例类:

之前介绍过用GSONFormat自动建立数据类,这里就不介绍了,有兴趣可以去看看,挺简单的,这里直接跳过吧,我们的数据解析类叫做Weather,下面会用到的;


3.创建网络请求接口:

在Retrofit中,这部分属于很重要的一部分了,用到了注解,Retrofit中注解很多,目前我用到了@GET以及@POST,可以解决绝大多数问题了。

1).@GET:

@GET()括号中,写入的是部分url网址,因为公用的url我们会在正式使用的时候设置,而后面的后缀不同,返回地参数也就不同,因此在GET()中会写入不同的部分:

 @GET("?")

这是我用的API的不确定部分:

https://query.asilu.com/weather/baidu/?city=南京

这就是API的网址了,我们可以传入城市来获取数据,前面都是一样的,因此我们只要在GET中写入“?”就可以,那么这个参数我们怎么传入呢:

Call<Weather> getWeather(@Query("city") String city);

这个Weather就是之前说过的数据解析类,@Query这部分代表的是个键值对,我的理解是,这个地方写的键值对会做“city = city”这样的形势放在?后面作为整体的url传入,如果有不对的希望大佬们告诉我;

2). @POST

顾名思义,这是需要我们上传一些数据的,比如我们进行数据上传登录注册等时,就需要用到这个,现在用的比较浅显,简要记录一下:

 @POST("?")
@FormUrlEncoded
Call<Weather> getCity(@Field("city") String city);

@FormUrlEncoded这个注解是为了说明上传的是个表单形式,下面的@Field在我理解下和之前的@Query含义是一样的,只是一个作为URL网址,一个作为数据;


4.实例化Retrofit:

这里先上代码吧:

String url="https://query.asilu.com/weather/baidu/";
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();

简洁的代码,新建了Retrofit.Builder(),然后传入baseUrl()我们设置好的url值,然后设置使用Gson解析,最后build()一下;


5.根据刚实例化的retrofir实例化网络请求接口:

WeatherInter weatherInter = retrofit.create(WeatherInter.class);

就这样;


6.实例化Call,配置网络请求参数:

Call<Weather> call=weatherInter.getCity(city);

我们这里测试一下获取的是不是我们想要的城市的天气,因此设置的getCity();


7.发送网络请求:

 call.enqueue(new Callback<Weather>() {

@Override
public void onResponse(Call<Weather> call, Response<Weather> response) {

String weather=response.body().getCity();
textView.setText(weather);
}
@Override
public void onFailure(Call<Weather> call, Throwable t) {

Toast.makeText(RetrofitActivity.this, "???", Toast.LENGTH_SHORT).show();
}
});

OVER!!!OVER!!!

用着确实是比其他的简单,不过还有其他的需要研究一下,下面贴一下整体代码:

public interface WeatherInter {

@GET("?")
Call<Weather> getWeather(@Query("city") String city);
@POST("?")
@FormUrlEncoded
Call<Weather> getCity(@Field("city") String city);
}
public class RetrofitActivity extends AppCompatActivity {

private ImageView imageView;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrofit);
imageView=findViewById(R.id.retrofit_Go);
textView=findViewById(R.id.retrofit_Text);
imageView.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

Retrofit("济宁");
}
});
}
public void retrofit(){

String url="https://query.asilu.com/weather/baidu/";
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
WeatherInter weatherInter=retrofit.create(WeatherInter.class);
Call<Weather> call=weatherInter.getWeather("济宁");
call.enqueue(new Callback<Weather>() {

@Override
public void onResponse(Call<Weather> call, Response<Weather> response) {

String weather=response.body().getWeather().get(0).getWeather();
textView.setText(weather);
}
@Override
public void onFailure(Call<Weather> call, Throwable t) {

Toast.makeText(getApplicationContext(),"???",Toast.LENGTH_SHORT).show();
}
});
}
public void Retrofit(String city){

String url="https://query.asilu.com/weather/baidu/";
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
WeatherInter weatherInter=retrofit.create(WeatherInter.class);
Call<Weather> call=weatherInter.getCity(city);
call.enqueue(new Callback<Weather>() {

@Override
public void onResponse(Call<Weather> call, Response<Weather> response) {

String weather=response.body().getCity();
textView.setText(weather);
}
@Override
public void onFailure(Call<Weather> call, Throwable t) {

Toast.makeText(RetrofitActivity.this, "???", Toast.LENGTH_SHORT).show();
}
});
}
}

其实没什么好贴的,但是我就想看着多一点,就这样。

在这里插入图片描述

版权声明
本文为[osc_u1w6ntu7]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4313604/blog/4917281

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云