Android 中get请求网络数据 详细举例
请求链接 https://api.bilibili.com/x/web-interface/ranking
1.添加网络权限 依赖等
implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'com.google.code.gson:gson:2.8.9'
2.写请求类network
package com.example.myapplication;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;import androidx.annotation.NonNull;import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.io.InputStream;
import java.security.PublicKey;
import java.util.function.BiFunction;import javax.xml.transform.OutputKeys;import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;public class NetWork {private static OkHttpClient client=new OkHttpClient.Builder().build();//get请求方式public static void get(String url, Callback callback){Request request=new Request.Builder().url(url).build();client.newCall(request).enqueue(callback);}//post请求方式public static void post(String url,Callback callback,String token,String json){RequestBody body=RequestBody.create(MediaType.get(""),json);Request request=new Request.Builder().url(url).post(body).build();client.newCall(request).enqueue(callback);}//网络图片下载public static void getimg(String url, ImageView img) throws IOException {img.setTag(url);Request request=new Request.Builder().url(url).build();Response response=client.newCall(request).execute();Bitmap bitmap= BitmapFactory.decodeStream(response.body().byteStream());//判断图片是否重复显示img.post(new Runnable() {public void run() {if (url.equals(img.getTag())) {img.setImageBitmap(bitmap);}}});}}
3.使用listview列表接收接口数据并显示
<ListViewandroid:id="@+id/video_list"android:layout_width="match_parent"android:layout_height="wrap_content"/>
4.编写bean类和适配器adapter 还有adapter页面的子布局
package com.example.myapplication.Bean;import java.io.Serializable;public class VideoBean implements Serializable {private String img;private String name;private int id;private String time;public VideoBean(String img, String name, int id, String time) {this.img = img;this.name = name;this.id = id;this.time = time;}public int getId() {return id;}public String getImg() {return img;}public String getName() {return name;}public String getTime() {return time;}
}
子布局xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="center"><ImageViewandroid:id="@+id/img"android:layout_width="150dp"android:layout_height="150dp"android:layout_gravity="center"/><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_gravity="center"android:layout_marginTop="5dp"/><TextViewandroid:id="@+id/time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_gravity="center"android:layout_marginTop="5dp"/></LinearLayout>
</LinearLayout>
Listview适配器adapter的编写
package com.example.myapplication.Adapter;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import androidx.constraintlayout.helper.widget.Layer;import com.example.myapplication.Bean.VideoBean;
import com.example.myapplication.NetWork;
import com.example.myapplication.R;
import com.example.myapplication.ToastUtil;import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class VideoAdapter extends BaseAdapter {private List<VideoBean> list;private Context context;public VideoAdapter(List<VideoBean> list, Context context) {this.list = list;this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView==null){convertView= LayoutInflater.from(context).inflate(R.layout.adapter_video,parent,false);}VideoBean bean=list.get(position);ImageView imageView=convertView.findViewById(R.id.img);TextView name=convertView.findViewById(R.id.name);TextView time=convertView.findViewById(R.id.time);name.setText(bean.getName());time.setText(bean.getTime());//开启子线程去下载图片new Thread(new Runnable() {public void run() {try {String url=bean.getImg();NetWork.getimg(url,imageView);}catch (Exception e){ToastUtil.show(context,"图片下载失败");}}}).start();return convertView;}
}
5.最后数据请求并且填充到listview上面
public class MainActivity extends AppCompatActivity {private ListView listView;private List<VideoBean>video_data=new ArrayList<>();protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView=findViewById(R.id.video_list);NetWork.get("https://api.bilibili.com/x/web-interface/ranking", new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {ToastUtil.show(MainActivity.this,"网络异常");}public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {String json=response.body().string();Map<String,Object> map=new Gson().fromJson(json, HashMap.class);Map<String,Object>data= (Map<String, Object>) map.get("data");List<Map<String, Object>>list= (List<Map<String, Object>>) data.get("list");runOnUiThread(new Runnable() {public void run() {for (Map<String,Object>list:list){Integer id;try {id=Integer.valueOf(list.get("aid").toString());}catch (Exception e){id=0;}VideoBean bean=new VideoBean(list.get("pic").toString(),list.get("title").toString(), id,list.get("duration").toString());video_data.add(bean);}listView.setAdapter(new VideoAdapter(video_data,MainActivity.this));listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {VideoBean bean=video_data.get(position);ToastUtil.show(MainActivity.this,bean.getId()+"");}});}});}});}
}
6.写一个ToastUtil工具类(判断是否需要在子线程发送)
package com.example.myapplication;import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;import androidx.annotation.NonNull;import org.jetbrains.annotations.NotNull;public class ToastUtil {private static Handler handler=new Handler(Looper.getMainLooper());public static void show(Context ctx,String txt){if (Looper.myLooper()==Looper.getMainLooper()){Toast.makeText(ctx, txt, Toast.LENGTH_SHORT).show();}else {handler.sendEmptyMessage(0);handler.post(new Runnable() {@Overridepublic void run() {Toast.makeText(ctx, txt, Toast.LENGTH_SHORT).show();}});}}
}
7.开始运行(效果图)
相关文章:

Android 中get请求网络数据 详细举例
请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…...

每日五道java面试题之mysql数据库篇(六)
目录: 第一题. MySQL中InnoDB引擎的行锁是怎么实现的?第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁?怎么解决?第四题. 数据库的乐观锁和悲观锁是什么?怎么实现的?第五题. 为什么要使用视图&a…...

Latex——多张图排列
一、方式一(subfig 与 subfloat 配合使用) % Need:\usepackage{subfig} \begin{figure}[htbp] % \setlength{\abovecaptionskip}{0.2cm} % \setlength{\belowcaptionskip}{-0.5cm} \centering\subfloat[MOT15]{\label{fig:a}\includegrap…...

前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
问题: 前两天一同事请教我:前端复选框问题-节点赋值未选中最后显示时确变成选中状态? 还有就是明明传过为的是false,在控制台上打印确变成选中状态,如下图: 以下是前端vue代码: <Scroll h…...

JavaScript命名标识符规范,前端开发面试
前端的现状 提到现状,必须先提到一个概念 大前端。由于近几年互联网的发展,尤其是移动互联网的发展,有的大前端概念将 Native 归入前端的范畴,有的大前端概念将 Node 甚至只渲染页面的 PHP 归入前端范畴,但不管怎么说…...

从零学习Linux操作系统 第三十部分 部署Anisble
一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…...

C++对象模型剖析(六)一一Data语义学(三)
Data 语义学(三) “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承(virtual inheritance)没有讲,现在我们就来看看吧。 虚拟继承(Virtual Inheritance) 虚拟继承本质就是…...

Java 代理模式详解(附案例源代码)
前言 Java代理模式是一种设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…...

七牛云 上传 文件 file is empty
问题 七牛云 上传 文件 file is empty 详细问题 笔者进行Android 开发,使用URI上传文件,上传核心代码 具体报错信息 {ver:8.7.0,ResponseInfo:1709276329412131,status:-6, reqId:, xlog:null, xvia:null, host:null, time:1709276329,error:file is…...

【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024
AI视野今日CS.Sound 声学论文速览 Tue, 5 Mar 2024 Totally 18 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers SA-SOT: Speaker-Aware Serialized Output Training for Multi-Talker ASR Authors Zhiyun Fan, Linhao Dong, Jun Zhang, Lu Lu, Zejun M…...

使用 BLAS 调用加快生成的独立代码中的矩阵运算
为了提高某些低级向量生成的代码的执行速度,并 矩阵运算(如矩阵乘法)在独立代码中,指定您 要MATLAB Coder™生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库,它具有 几个高度优化的机器特定实现。代码生成…...

一台服务器,最大支持的TCP连接数是多少?
一个服务端进程最大能支持多少条 TCP 连接? 一台服务器最大能支持多少条 TCP 连接? 一、原理 TCP 四元组的信息:源IP、源端口、目标IP、目标端口。 一个服务端进程最大能支持的 TCP 连接个数的计算公式:最大tcp连接数客户端的IP…...

微信小程序云开发教程——墨刀原型工具入门(编辑页面)
引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用…...

flutter打包app
Flutter 打包APP (Android & IOS)_encountered error while building for device.-CSDN博客 使用命令行 keytool -genkey -v -keystore ../key -keyalg RSA -keysize 2048 -validity 10000 -alias key 将在文件根目录上一层生成key文件࿰…...

力扣543. 二叉树的直径
Problem: 543. 二叉树的直径 文章目录 题目描述思路复杂度Code 题目描述 思路 1.最大直径 左子树的最大深度 右子树的最大深度; 2.定义一个变量maxDiameter记录最大直径,并编写一个递归函数maxDepth,利用树的后序遍历每次递归求取leftMax&a…...

python网络爬虫教程笔记(1)
系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么?2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理:证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手,4次挥手过程 总结…...

C# 异步返回类型详解
在现代软件开发中,异步编程已经成为一种重要的编程范式,尤其是在需要与I/O密集型操作交互的上下文中,比如网络请求、数据库操作等。C# 语言提供了强大的异步支持,使得异步编程变得更加简单和直观。本文将详细介绍C#中异步返回类型…...

BAT等大厂必问技术面试题,【2024Android最新学习路线
下面分享一下我在爱奇艺的面经 面试前的话:在面试时一定不要受前面没有过的面试的影响,一定要有一个好的心态,不要面试还没开始就自己把自己思绪搞乱了 一共进行了4轮面试 爱奇艺一面 50min 项目 主要介绍了以前做过的项目,分析…...

72. 编辑距离【leetcode】/动态规划难
72. 编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros”…...

【MySQL】视图、索引
目录 视图视图的用途优点视图的缺点创建视图查看视图修改视图删除视图注意事项 索引索引的原理索引的数据结构二分查找法Hash结构Hash冲突!!! B树二叉查找树 存在问题改造二叉树——B树降低树的高度 B树特点案例继续优化的方向 改造B树——B树…...

反编译java生成的.class文件
java代码编译后生成xxx.class文件,有时候需要反编译这个class文件看代码是怎么写的,可以使用下面这个工具。 工具已经上传到资源,链接: https://download.csdn.net/download/weixin_42556307/88915887 具体使用如下: …...

Cookie 探秘:了解 Web 浏览器中的小甜饼
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

Python线性代数数字图像和小波分析之二
要点 数学方程:数字信号和傅里叶分析,离散时间滤波器,小波分析Python代码实现及应用变换过程: 读取音频和处理音频波,使用Karplus-强算法制作吉他音频离散傅里叶计算功能和绘制图示结果计算波形傅里叶系数正向和反向&…...

LC.exe”已退出,代码为 -1
尽管网络上已经有许多详尽的说明和资料,但鉴于个人对大量文字的理解有反感,我就写一个更为直观、简洁的方式来呈现我的解决方案。 1.问题图片。 2.删除licenses.licx 3.问题解决...

springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略
导入达梦数据库对hibernate的方言包 <dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.6</artifactId><version>8.1.2.192</version></dependency>配置文件中添加方言配置和主键生成策略配置…...

Redis优化与应用
Redis性能调优 - Redis的性能调优是一个比较复杂的过程,需要从多个方面进行优化,如内存使用、命令使用等。 - 案例:减少不必要的持久化操作。默认情况下,Redis会执行RDB和AOF两种持久化方式。如果不需要持久化,或者可…...

深入了解Kafka的文件存储原理
Kafka简介 Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类,发送消息者称为Producer&…...

RabbitMQ 高级
在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。 但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单…...

音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)
本文主要讲解的是音频基础概念、交叉编译原理和实践(LAME的交叉编译),是基于Android平台,示例代码如下所示: AndroidAudioDemo 音频基础概念 在进行音频开发的之前,了解声学的基础还是很有必要的。 声音…...

直播美颜SDK开发指南:构建个性化的主播美颜工具
本篇文章,小编将带您深入了解如何构建个性化的主播美颜工具,从而为用户提供更优质的直播体验。 一、美颜技术概述 在开始SDK的开发之前,我们首先需要了解美颜技术的基本原理。美颜技术通常包括肤色检测、人脸检测、特征点定位、滤镜处理等步…...