Android Retrofit
目录
1.Retrofit是什么?
2.OkHttp和Retrofit
3.Retrofit的使用(异步GET)
1 添加Retrofit库的依赖
2 添加网络权限
3 创建接收服务器返回数据的类
4 创建用于描述网络请求的接口
5 创建Retrofit实例
6 创建网络请求接口实例
7 发送网络请求
8 处理返回结果
4 Retrofit的使用(异步POST)
1 添加Retrofit库的依赖
2 添加网络权限
3 创建接收服务器返回数据的类
4 创建用于描述网络请求的接口 (接收请求体)
5 创建Retrofit实例
6 创建网络请求接口实例
7 发送网络请求
8 处理返回结果
5Retrofit+OkHTTP+RecycleView的实现步骤
第一步: 创建项目
第二步:导入依赖
第三步:添加网络权限
第四步:在activity_main.xml添加Recycle,并给其设置id
第五步:创建子布局 news_item.xml
第六步:创建实体类
第七步:创建适配器
第八步:设置适配器
第九步:进行网络请求
1.Retrofit是什么?
准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装
2.OkHttp和Retrofit
3.Retrofit的使用(异步GET)
1 添加Retrofit库的依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
2 添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3 创建接收服务器返回数据的类
public class PhoneAddress {private boolean success;private String tel;private Info info;public static class Info{private String local;private String duan;private String type;private String yys;private String bz;@Overridepublic String toString() {return "Info{" +"local='" + local + '\'' +", duan='" + duan + '\'' +", type='" + type + '\'' +", yys='" + yys + '\'' +", bz='" + bz + '\'' +'}';}}public void show(){System.out.println(success);System.out.println(tel);System.out.println(info.local);System.out.println(info.duan);System.out.println(info.type);System.out.println(info.yys);System.out.println(info.bz);}@Overridepublic String toString() {return "PhoneAddress{" +"success=" + success +", tel='" + tel + '\'' +", info=" + info +'}';}
}
4 创建用于描述网络请求的接口
public interface GetRequest_Interface {@GET("api/phone?")Call<PhoneAddress> getCall(@Query("tel")String tel);
}
5 创建Retrofit实例
6 创建网络请求接口实例
7 发送网络请求
8 处理返回结果
//创建Retrofit对象
Retrofit retrofit=new Retrofit.Builder().baseUrl("https://api.vvhan.com/").addConverterFactory(GsonConverterFactory.create()).build();
//创建网络请求接口的实例
GetRequest_Interface request=retrofit.create(GetRequest_Interface.class);
//对发送送请求进行封装
Call<PhoneAddress> call=request.getCall(phonenum);
//发送网络请求(异步)
call.enqueue(new Callback<PhoneAddress>() {@Overridepublic void onResponse(Call<PhoneAddress> call, Response<PhoneAddress> response) {tv_show.setText(response.body().toString());}@Overridepublic void onFailure(Call<PhoneAddress> call, Throwable t) {Log.i("onFailure","请求失败");}
});
4 Retrofit的使用(异步POST)
1 添加Retrofit库的依赖
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
2 添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3 创建接收服务器返回数据的类
public class LoginInfo {private int success;private String info;@Overridepublic String toString() {return "LoginInfo{" +"success=" + success +", info='" + info + '\'' +'}';}
}
4 创建用于描述网络请求的接口 (接收请求体)
public interface PostRequest_Interface {@POST("login")Call<LoginInfo> postCall(@Body RequestBody requestBody);
}
5 创建Retrofit实例
6 创建网络请求接口实例
7 发送网络请求
8 处理返回结果
private void postData(String num) {Retrofit retrofit=new Retrofit.Builder().baseUrl("http://192.168.17.181:8080/TestWeb_war_exploded/").addConverterFactory(GsonConverterFactory.create()).build();PostRequest_Interface request=retrofit.create(PostRequest_Interface.class);MediaType type=MediaType.Companion.parse("application/json;charset=utf-8");RequestBody body=RequestBody.Companion.create(num,type);Call<LoginInfo> call=request.postCall(body);call.enqueue(new Callback<LoginInfo>() {@Overridepublic void onResponse(Call<LoginInfo> call, Response<LoginInfo> response) {Log.i("onResponse",response.body().toString());}@Overridepublic void onFailure(Call<LoginInfo> call, Throwable t) {Log.i("onFailure","失败");}});}
5Retrofit+OkHTTP+RecycleView的实现步骤
第一步: 创建项目
第二步:导入依赖
implementation "com.github.bumptech.glide:glide:4.12.0" implementation("com.squareup.okhttp3:okhttp:4.10.0") implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
第三步:添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
第四步:在activity_main.xml添加Recycle,并给其设置id
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:padding="5dp"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_news"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>
第五步:创建子布局 news_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="200dp"android:orientation="vertical"xmlns:app="http://schemas.android.com/apk/res-auto"app:cardCornerRadius="5dp"android:padding="5dp"app:cardElevation="5dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="190dp"android:layout_margin="5dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/news_show"android:layout_width="190dp"android:layout_height="190dp"app:srcCompat="@drawable/ic_launcher_background" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_marginTop="5dp"android:id="@+id/news_title"android:layout_marginStart="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><TextViewandroid:layout_marginTop="20dp"android:id="@+id/news_desc"android:layout_marginStart="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /></LinearLayout></LinearLayout>
</androidx.cardview.widget.CardView>
第六步:创建实体类
package com.hopu.day23_practice.model;import java.util.List;public class News {private boolean success;private String title;private String subtitle;private String update_time;private List<Data> data;public void setSuccess(boolean success) {this.success = success;}public boolean getSuccess() {return success;}public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}public void setSubtitle(String subtitle) {this.subtitle = subtitle;}public String getSubtitle() {return subtitle;}public String getUpdate_time() {return update_time;}public void setUpdate_time(String update_time) {this.update_time = update_time;}public void setData(List<Data> data) {this.data = data;}public List<Data> getData() {return data;}public class Data {private int index;private String title;private String desc;private String pic;private String hot;private String url;private String mobilUrl;public void setIndex(int index) {this.index = index;}public int getIndex() {return index;}public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}public void setDesc(String desc) {this.desc = desc;}public String getDesc() {return desc;}public void setPic(String pic) {this.pic = pic;}public String getPic() {return pic;}public void setHot(String hot) {this.hot = hot;}public String getHot() {return hot;}public void setUrl(String url) {this.url = url;}public String getUrl() {return url;}public void setMobilUrl(String mobilUrl) {this.mobilUrl = mobilUrl;}public String getMobilUrl() {return mobilUrl;}@Overridepublic String toString() {return "Data{" +"index=" + index +", title='" + title + '\'' +", desc='" + desc + '\'' +", pic='" + pic + '\'' +", hot='" + hot + '\'' +", url='" + url + '\'' +", mobilUrl='" + mobilUrl + '\'' +'}';}}@Overridepublic String toString() {return "News{" +"success=" + success +", title='" + title + '\'' +", subtitle='" + subtitle + '\'' +", update_time='" + update_time + '\'' +", data=" + data +'}';}
}
第七步:创建适配器
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {List<News.Data> list;public void setResource(List<News.Data> list){this.list=list;notifyDataSetChanged();}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);ViewHolder viewHolder=new ViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {News.Data data=list.get(position);Glide.with(holder.view).load(data.getPic()).into(holder.news_show);holder.news_title.setText(data.getTitle());holder.news_desc.setText(data.getDesc());}@Overridepublic int getItemCount() {if (list==null){return 0;}else {return list.size();}}public class ViewHolder extends RecyclerView.ViewHolder {ImageView news_show;TextView news_title;TextView news_desc;View view;public ViewHolder(@NonNull View itemView) {super(itemView);view=itemView;news_desc=itemView.findViewById(R.id.news_desc);news_title=itemView.findViewById(R.id.news_title);news_show=itemView.findViewById(R.id.news_show);}}
}
第八步:设置适配器
//声明容器NewsAdapter newsAdapter;RecyclerView rv_news;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);rv_news=findViewById(R.id.rv_news);newsAdapter=new NewsAdapter();LinearLayoutManager layoutManager=new LinearLayoutManager(this);rv_news.setLayoutManager(layoutManager);rv_news.setAdapter(newsAdapter);initData();}
第九步:进行网络请求
1. 创建请求接口
public interface News_Interface {@GET("api/hotlist?type=zhihuHot")Call<News> getNews();
}
private void initData() {Retrofit retrofit=new Retrofit.Builder().baseUrl("https://api.vvhan.com/").addConverterFactory(GsonConverterFactory.create()).build();News_Interface news_interface=retrofit.create(News_Interface.class);Call<News> call=news_interface.getNews();call.enqueue(new Callback<News>() {@Overridepublic void onResponse(Call<News> call, Response<News> response) {Log.i("onResponse",response.body().toString());newsAdapter.setResource(response.body().getData());}@Overridepublic void onFailure(Call<News> call, Throwable t) {Log.i("onFailure","请求失败");}});}
Android Retrofit相关推荐
- Android Retrofit+RxJava 优雅的处理服务器返回异常、错误
Android Retrofit+RxJava 优雅的处理服务器返回异常.错误 参考文章: (1)Android Retrofit+RxJava 优雅的处理服务器返回异常.错误 (2)https:// ...
- Android Retrofit @Streaming 注解失效
Android Retrofit @Streaming 注解失效 问题特征: 即使加了@Streaming方法也不能达到逐步加载大文件数据的效果,产生的效果为下载会有长时间的卡顿,卡顿后,会在极端的时 ...
- Android Retrofit 2.0文件上传
Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传 使用Retrofit进行文件上传,肯定离不开Part & PartMap. public interface ...
- Android Retrofit下载文件进度
In this tutorial, we'll create an android application which downloads a file from the URL using Retr ...
- Android Retrofit 2.0(三)从源码分析原理
Retrofit·特点 性能最好,处理最快 使用REST API时非常方便: 传输层默认就使用OkHttp: 支持NIO: 拥有出色的API文档和社区支持 速度上比volley更快: 如果你的应用程序 ...
- android retrofit 从无知到入门
android retrofit 从无知到入门 前言 一.初识retrofit 1.retrofit是什么? 2.一些配置和数据准备 3.快速上手retrofit a.接口 b.实现 c.execut ...
- android retrofit 2.0公共参数,Android Retrofit 2.0 使用-补充篇
之前分享的Android Retrofit 2.0 使用,属于基本的使用,实际开发还远远不够,因此对其补充,主要在Retrofit配置和接口参数. Retrofit配置 添加依赖 app/build. ...
- Android Retrofit实现原理分析
retrofit有几个关键的地方. 1.用户自定义的接口和接口方法.(由动态代理创建对象.) 2.converter转换器.(把response转换为一个具体的对象) 3.注解的使用. 让我们跟随Ap ...
- android get请求最长字符串,android – Retrofit @GET – 如何显示请求字符串?
我正在使用一个使用Retrofit创建一个休息的客户端的 Android应用程序.为了调试网络调用,我想显示或转储实际被调用的url.有没有办法做到这一点?我已经在下面列出了一些代码,显示了应用程序当 ...
- Android --- Retrofit 上传/下载文件扩展实现进度的监听
本文使用okhttp作为client来做,其实说白了跟用okhttp做下载上传进度监听几乎一样,参考了这篇文章:Android OkHttp文件上传与下载的进度监听扩展 1. 首先我们写两个接口用来下 ...
最新文章
- Yum编译安装Error Downloading Packages报错
- 用什么方法才能测量出无线发射模块的功率呢?
- 17_传智播客iOS视频教程_代码中的面向过程与面向对象以及优缺点分析
- RabbitMQ/pika模块
- leetcode276. 栅栏涂色
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入
- Magento站点优化方案
- Ghost 命令参数详解
- python函数笔记_初学Python函数的笔记整理
- Hbase面试 描述 Hbase 中 scan 和 get 的功能以及实现的异同.
- weblogic + apache 负载均衡与Session复制
- 从零开始研发GPS接收机连载——4、GPS模拟器数据采集验证
- Gameplay - 多人游戏关卡设计
- TTL(UART)信号和RS232信号 对比
- Matplotlib进阶教程:布局讲解
- 云边协同关3篇政策与技术跟踪专题文章摘录
- 计算机无法连接到指定的服务器,无法连接Windows远程服务器的几种解决办法
- 20220223换硬盘操作
- C语言解决经典问题约瑟夫环--数组
- Springboot项目 web 添加 favicon.ico图标