Gson接口解析ListView优化展示

Python Selenium自动化爬虫实战:城通网盘批量文件下载链接提取 网络爬虫是自动化获取网页数据的关键技术,其核心原理是通过模拟浏览器行为或发送HTTP请求来解析和提取目标信息。在动态网页日益普及的今天,传统的静态请求库往往难以应对由JavaScript渲染生成的内容,此时浏览器自动化工具的价值便凸显出来。Selenium作为成熟的WebDriver框架,能够驱动真实浏览器完整加载页面、执行脚本并渲染最终DOM,从而有效解决动态内容爬取难题,在数据采集、自动化测试和RPA流程中应用广泛。针对城通网盘这类反爬机制较强、页面交互复杂的场景,结合Selenium进行元素定位、智能 阅读详情

一、主页面 Java代码

		(布局里一个ListView,此处就省略了~~~~)

/*第一个页面
 * 我们用handler+子线程实现请求
 * 并且实现网络判断
 * 以及 没网的时候加载本都数据
 * =============
 * 判断网洛
 * 请求网络
 * 数据库的方法
 *  **第一步 :权限 很多人忘记加权限,所以第一步先把用到的权限加上
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />****
 * */


@Nullable
@Override
   String strURL = "https://www.apiopen.top/novelApi";    //接口地址
   private ListView listView;
public View on**加粗样式**CreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.frag01, container, false);
    
    //第二部:找控件
    listView = view.findViewById(R.id.listview);
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //第三部:数据( 网络请求数据 使用handler+子线程)
    new Thread() {
        @Override
        public void run() {
            super.run();
            //第四部:判断网络
            boolean isnNet = HttpUtil.isNetworkConnected(getActivity());
            String s = "";
            if (isnNet) {
                //第五步:如果有网络就加载网络数据
                s = HttpUtil.requestString(strURL);
                //得到数据后发送给handler进行解析

            } else {
                //如果没网就就XXXXX
            }
            //第六步  把数据发送给主线程
            Message message = new Message();
            message.what = 0;
            message.obj = s;
            handler.sendMessage(message);
        }
    }.start();
    //适配器
}

Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 0:
                //第七步:得到数据并解析
                String s = (String) msg.obj;
                //解析
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                //我的Jsonbean是用Androidstudio工具封装(Alt+S 复制进去数据,点Ok)
                ArrayList<JsonBean.DataBean> list = jsonBean.getData();
                //第八步:展示数据到listview上
                listView.setAdapter(new MyAdapter(list,getActivity()));
                break;
        }
    }
};

二、工具类

public class HttpUtil {
public static boolean isNetworkConnected(Context context) { //注意工具类中使用静态方法
    //判断上下文是不是空的
    //为啥要判断啊? 防止context是空的导致 报空指针异常
    if (context != null) {
        //获取连接管理器
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //获取网络状态mConnectivityManager.getActiveNetworkInfo();
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();

        if (mNetworkInfo != null) {
            //判断网络是否可用//如果可以用就是 true  不可用就是false
            return mNetworkInfo.isAvailable();
        }
    }
    return false;
}

//=====================================================
public static String requestString(String strUrl) {
    try {
        //把String 变成URL
        URL url = new URL(strUrl);
        //打开连接
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        //连接超时时间
        connection.setConnectTimeout(5000);
        //读取超时时间
        connection.setReadTimeout(5000);
        //设置请求方式(要大写)
        connection.setRequestMethod("GET");
        //判断请求码 HttpURLConnection.HTTP_OK
        if (connection.getResponseCode() == 200) {
            //获取输入流(输入=>读,输出=>写)
            //ctrl+alt+V 补全代码
            InputStream stream = connection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(stream, "utf-8");//为了防止乱码
            BufferedReader reader = new BufferedReader(inputStreamReader);

            //拼接字符串
            StringBuffer buffer = new StringBuffer();
            String str = "";
            //读取字符串
            while ((str = reader.readLine()) != null) {
                //拼接字符串
                buffer.append(str);
            }
            return buffer.toString();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
   }
}

三、适配器代码

public class MyAdapter extends BaseAdapter {//继承BaseAdapter

private ArrayList<JsonBean.DataBean> list;
private Context context;
public MyAdapter(ArrayList<JsonBean.DataBean> list, Context context) {
    this.list = list;
    this.context = context;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = View.inflate(context, R.layout.item, null);
    ImageView imageView = convertView.findViewById(R.id.imageView);
    TextView textView = convertView.findViewById(R.id.textView);

    JsonBean.DataBean dataBean = list.get(position);
    textView.setText(dataBean.getBookname());
    ***//设置图片 需要导Glide包***
    Glide.with(context).load(dataBean.getBook_cover()).into(imageView);
    return convertView;
}

}
=下面是ListView优化时候代码==
ViewHolder holder;
if (convertView==null){
convertView=View.inflate(context,R.layout.item,null);
holder = new ViewHolder();
holder.textView=convertView.findViewById(R.id.textView);
holder.textView2=convertView.findViewById(R.id.textView2);
holder.imageView=convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).getType());
holder.textView2.setText(list.get(position).getCreatedAt());
Bean.DataBean dataBean = list.get(position);
// holder.imageView.setImageURI(list.get(position).getUrl());
Glide.with(context).load(dataBean.getUrl()).into(holder.imageView);
return convertView;
}
class ViewHolder{
TextView textView,textView2;
ImageView imageView;
}

VC++深入详解第三卷PDF获取与高效学习指南 在软件开发领域,PDF电子书作为一种经典的知识载体,因其便携性和离线可查性,成为开发者构建个人离线知识库的重要资源。其核心价值在于将系统化的知识体系进行结构化封装,便于进行问题导向的精准检索与深度学习。对于涉及Windows平台底层开发、遗留系统维护或特定工业软件二次开发的技术人员而言,掌握高效获取与利用高质量技术PDF的方法,是一项关键的工程实践能力。这不仅能帮助解决诸如“Flutter打包如何集成VC++运行时库”等实际部署问题,也能为理解类似PDF.js等现代组件的底层原理提供坚实的知识背景。本文以经 阅读详情

相关推荐

BP3开源程序:自建百度网盘目录列表的部署与优化全指南

从开放平台API读取网盘文件并在网页以目录树展示,是一种提升资源分享效率的常用思路。文章从百度网盘原生分享页的常见痛点切入,介绍基于PHP的BP3开源程序如何扮演“网盘与网站之间的桥梁”角色。内容覆盖运行环境准备、API密钥申请、回调地址配置、首次授权、缓存机制与下载提速技巧,并结合真实踩坑经验说明中文乱码、幽灵目录、被盗链等问题的应对策略。同时,工程实践中需关注API限流与安全加固。通过合理设置缓存和防盗链,可让个人站长、小团队以低成本打造出稳定、可搜索、可定制的网盘目录列表服务,从而满足资源站或内部共享

weixin_29014237的博客 243

JAVA中GSON的使用--如何存储和读取ArrayList结构数据

gson的实例化,存取与读取。其中文件存储格式为工整、漂亮的json存储格式。

qq_63141702的博客 1030

Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用

Gson解析网络数据显示到listview上,加入万能适配器,适配器就10行,大家可以复制包用,在log日记查看完整的Json数据,listview上我显示了title给大家看效果,适配器只要10行左右,简单易懂。

java gson解析json数组_使用Gson将JSON数组解析为java.util.List

下面的代码正在使用com.google.gson.JsonArray。我已经打印了列表中的元素数量以及列表中的元素import java.util.ArrayList;import com.google.gson.Gson;import com.google.gson.JsonArray;import com.google.gson.JsonObject;import com.google.gso...

weixin_40009063的博客 641

Android通过gson自动解析服务器返回的json数据

Android通过gson自动解析服务器返回的json数据

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

Gson解析数组

Gson gson=new Gson(); //MyDataData是bean类  ArrayList dataDataBean= gson.fromJson(s, new TypeToken>(){}.getType()); for (MyDataData a: dataDataBean) { List results = a.getData(); if (results!

呵呵呵 889

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

java gson arraylist_如何使用gson将此json字符串转换为普通的java arraylist

我试图将以下JSON字符串转换为Array并收到以下错误:Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory atnet.sf.json.AbstractJSON.(AbstractJSON.java:54) atnet.sf.json...

weixin_42651281的博客 414

win2016 php mysql_Windows Server 2016 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程 | 系统运维...

准备篇一、环境说明:操作系统:Windows Server 2016PHP版本:php 7.1.0MySQL版本:MySQL 5.7.17.0二、相关软件下载:1、PHP下载地址:2、MySQL下载地址:3、Microsoft Visual C++ 2010 可再发行组件包(安装MySQL需要此插件)4、Visual C++ Redistributable for Visual Studio 20...

weixin_34794420的博客 1377

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 520

android如何将json解析的数据存入到list数组中,如何使用GSON解析此JSON数据?并将其放入ArrayList中...

我正在尝试解析MongoDB云服务器中的数据.我从服务器返回的JSON数据如下:[{"_id": {"$oid": "4e78eb48737d445c00c8826b"},"message": "cmon","type": 1,"loc": {"longitude": -75.65530921666667,"latitude": 41.407904566666666},"title": "test...

weixin_42501848的博客 399

Optisystem软件与Matlab软件的联合数据读取

目录 Matlab软件程序编写 Optisystem软件的连接与设置 数据读取结果 Matlab软件程序编写 利用Matlab软件按照下图编写程序,保存为getdata.m文件。 OutputPort1 =InputPort1; fileID=fopen('OSAdata.txt','wt'); fprintf(fileID,'%f\n',OutputPort1.Sampled.Signal); fclose(fileID); Optisystem软件的连接与设置 (以基于线性插值法

Vivian_Chen_的博客 4853

Android 序列化框架 Gson 原理分析,可以优化吗?

大家好,我是小彭。Gson是 Google 推出的 Java Json 解析库,具有接入成本低、使用便捷、功能扩展性良好等优点,想必大家都很熟悉了。在这篇文章里,我们将讨论 Gson 的基本用法和以及主要流程的源码分析。小彭的 Android 交流群 02 群已经建立啦,扫描文末二维码进入~和是 Gson 1.x 版本提供的自定义解析 API,是基于树型结构的解析 API。在解析数据时,它们会将 Json 数据一次性解析为树型结构。描述JsonObject{} 对象JsonArray[] 数组。

pengxurui的博客 1114

基于 STM32 的手持式安检金属探测器设计与实现

【代码】基于 STM32 的手持式安检金属探测器设计与实现。

weixin_42300449的博客 900

【时空图神经网络 & 交通】相关模型3:STFGNN | 空间-时间依赖性 | 基于数据驱动的方法来生成“时间图” | 时空融合图模块,门控卷积模块 | 动态时间规整 | 顶会文章解析

STFGNN(时空融合图神经网络)在交通流量预测中的优势主要体现在以下几个方面:首先,它提出了一种数据驱动的方法生成“时间图”,弥补了传统空间图可能无法反映的某些相关性。其次,STFGNN通过并行处理不同时间段的空间图和时间图,有效地学习隐藏的时空依赖关系。此外,它将融合图模块与门控卷积模块整合到一个统一层中,通过层层堆叠处理长序列,进一步增强了模型的表达能力。实验结果表明,STFGNN在多个交通数据集上表现出色,优于其他基准方法,展示了其在实际应用中的强大潜力。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 384

gson基本介绍

public class Message { private String id; private String name; private String age; } public class Classroom { private String number; private String house; private Message message; } Json格式字符串转换为对应的Java对象 {"id":"1","name":"name_one

小白 309

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录

最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

【性能优化】GSON解性能瓶颈分析

    GSON是Google提供的开源库,使用很便捷,但是在使用过程中也发现了其短板,在Bean类结构复杂时,进行反序列化耗时占比较高,尤其是很多在应用启动阶段需要反序列化一些内置的数据时,很让人头疼,通过抓Trace每次都能发现这货肯定是大头。     为了从正面优化这个问题,于是我翻看了GSON反序列化的源码,实现了能优化的方案,希望能帮助到同样面临该问题的同学们,如有问题也可以提出来。 如上图GSON解析过程的耗时可以

TechMix的博客 1351

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Android】Gson的优化

过滤不需要解析的属性

qq_23049111的博客 1144

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Gson解析list

方法原理: String result = "[{\"id\":1,\"departmentId\":null,\"name\":\"威震天\",\"mobile\":\"13011111111\",\"telephone\":\"80000000\",\"gender\":1,\"email\"

you943047219的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android Gson ArrayList 将jsonString转成泛型bean ArrayList

build.gradle中添加 compile 'com.google.code.gson:gson:2.7'/** * 将jsonString转成泛型bean * Created by gb on 2018/1/22. */ public class GsonUtils { /** * 将jsonString转成泛型bean * * @param gs

仰望星空 2003

gson解析对象数组

gson 解析对象数组 public static <T> ArrayList<T> jsonToArrayList(String json, Class<T> clazz) { Type type = new TypeToken<ArrayList<JsonObject>>() { }.getType(); ArrayList<JsonObject>

youfat的博客 2424

Gson解析(List和Map)格式json数据

主要解析 两种格式 列表格式 和 map格式 常用的是列表解析,以前不知道解析map,就用json配合gson使用,今天在论坛看到有人问,就试了一下才发现 解析map也很方便,哇喔,又涨姿势了.. public class jsonParse{ class City{ int id; String name;

独自等待 8万+

Gson解析数组和解析集合的方法

Gson解析数组和解析集合的方法。Gson为我们提供了TypeToken来实现对泛型的支持,用来解析集合

qq_38013013的博客 2万+
上一篇: Java入门级冒泡排序理解
下一篇: 接口解析XListView下拉刷新 上拉加载更多
Android_Mr_Zhao
博客等级 码龄8年 9粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值