Android - 框架使用

article/2025/9/24 11:16:39

目录

1 Gson解析JSON

1.1 引入依赖

1.2 使用

1.3 安装插件

1.4 Demo 

2 下滑刷新,上滑加载新数据

2.1 背景

2.2 引入依赖

2.3 代码实现

3 加载网络图片

3.1 背景

3.2 引入依赖

3.3 代码实现

4 轮播图

4.1 引入依赖

4.2 代码实现

5 网络数据请求 Retrofit

5.1 引入依赖

6、viewBinding


1 Gson解析JSON

为什么需要用到Gson?

当我们对JSON进行解析的时候,觉得太繁琐了。

1.1 引入依赖

implementation 'com.google.code.gson:gson:2.9.0'

1.2 使用

Gson gson = new Gson();
Class1 class1 = gson.fromJson(finalResult,Class1.class);

两行代码就实现了对JSON字符串的解析。注意这里的Class1这个类是要自己写的(表示班级,字段有:年级,学生列表等.),这个类的字段要符合JSON的格式,所以我们还需要自己写一个类,还是比较麻烦的。所以我们下面介绍一款插件来简化开发! 

1.3 安装插件

在使用gson对json进行解析

 

最后,就自动生成这个类的代码了! 

package com.hnucm.network;import java.util.List;
// { "grade":"18级","classname":"计算机科学与技术","students":[ { "id":"001","age":30,"name":"张三", "isstudent":false }, { "id":"002","age":25,"name":"李四", "isstudent":true }, { "id":"003","age":26,"name":"王五", "isstudent":true } ]}
public class Class1 {private String grade;private String classname;private List<StudentsDTO> students;public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}public String getClassname() {return classname;}public void setClassname(String classname) {this.classname = classname;}public List<StudentsDTO> getStudents() {return students;}public void setStudents(List<StudentsDTO> students) {this.students = students;}public static class StudentsDTO {private String id;private int age;private String name;private boolean isstudent;public String getId() {return id;}public void setId(String id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isIsstudent() {return isstudent;}public void setIsstudent(boolean isstudent) {this.isstudent = isstudent;}}
}

1.4 Demo 

public class MainActivity extends AppCompatActivity {TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.text1);Thread thread = new Thread(){@Overridepublic void run() {super.run();try {/*//http://121.4.44.56/user//http://121.4.44.56/object1//http://121.4.44.56/object2//http://121.4.44.56/object3*/URL url = new URL("http://121.4.44.56/object3");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setRequestMethod("GET");InputStream inputStream = urlConnection.getInputStream();Reader reader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(reader);String result = "";String temp;while((temp = bufferedReader.readLine())!=null){result += temp;}Log.i("gls",result);String finalResult = result;// 在UI线程运行
//                    runOnUiThread(new Runnable() {
//                        @Override
//                        public void run() {
//
//                            
//                        }
//                    });//                  lambda 表达式runOnUiThread(()->{// 利用第三方框架,一次性将JSON解析为对象Gson gson = new Gson();Class1 class1 = gson.fromJson(finalResult,Class1.class);List<Class1.StudentsDTO> students = class1.getStudents();for(Class1.StudentsDTO studentsDTO : students){Log.i("gls",studentsDTO.getName());}});bufferedReader.close();reader.close();inputStream.close();} catch (Exception e) {e.printStackTrace();}}};thread.start();}}

 注意:

该过程因为有访问服务器,所以有需要使用网络,所以要记得配置联网授权。

2 下滑刷新,上滑加载新数据

2.1 背景

为什么我们要使用?

使用第三方框架,可以使开发更简单,同时样式也更加丰富。

2.2 引入依赖

在build.gradle文件的dependencies节点添加以下依赖:

//  下滑刷新,上滑加载implementation  'io.github.scwang90:refresh-layout-kernel:2.0.5'//核心必须依赖implementation  'io.github.scwang90:refresh-header-classics:2.0.5'//经典刷新头implementation  'io.github.scwang90:refresh-header-radar:2.0.5'//雷达刷新头implementation  'io.github.scwang90:refresh-header-falsify:2.0.5'//虚拟刷新头implementation  'io.github.scwang90:refresh-header-material:2.0.5' //谷歌刷新头implementation  'io.github.scwang90:refresh-header-two-level:2.0.5' //二级刷新头implementation  'io.github.scwang90:refresh-footer-ball:2.0.5' //球脉冲加载implementation  'io.github.scwang90:refresh-footer-classics:2.0.5' //经典加载

在gradle.properties中添加

android.useAndroidX=true  # 文件中已存在,所以不必添加
# 上拉刷新,下拉加载  还有android.useAndroidX=true
android.enableJetifier=true

2.3 代码实现

1、在activity_main中将RecylerView嵌入SmartRefreshLayout(智能刷新布局)

 2、设置刷新的样式等

3 加载网络图片

3.1 背景

加载的图片,一般是不放在项目中的,而且是网上找资源。可以自己有一台服务器,在服务器上存放使用的图片。

3.2 引入依赖

//  所需依赖implementation 'com.github.bumptech.glide:glide:4.13.0'annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

注意:

  • 需要联网授权

3.3 代码实现

4 轮播图

4.1 引入依赖

implementation 'io.github.youth5201314:banner:2.2.2'
implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'

4.2 代码实现

定义Banner控件,相当于存放图片的容器。

    <com.youth.banner.Bannerandroid:id="@+id/banner"android:layout_width="match_parent"android:layout_height="200dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"></com.youth.banner.Banner>
public class MainActivity extends AppCompatActivity {Banner banner;List<String> bannerList = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);banner = findViewById(R.id.banner);bannerList.add("https://www.keaidian.com/uploads/allimg/190424/24110307_6.jpg");bannerList.add("https://img.mianfeiwendang.com/pic/65133e4129b6446aa22c9f9f/1-810-jpg_6-1080-0-0-1080.jpg");bannerList.add("https://www.keaidian.com/uploads/allimg/190424/24110307_19.jpg");banner.setAdapter(new BannerImageAdapter<String>(bannerList) {@Overridepublic void onBindView(BannerImageHolder holder, String data, int position, int size) {Glide.with(holder.imageView).load(data).into(holder.imageView);}});banner.setIndicator(new CircleIndicator(this));banner.setIndicatorRadius(200);}
}

5 网络数据请求 Retrofit

5.1 引入依赖

//  解析JSON  第三发框架implementation 'com.google.code.gson:gson:2.9.0'
//    OkHttp   简化网络请求 -- 第三方框架implementation("com.squareup.okhttp3:okhttp:4.9.3")//  Retrofit 框架
//    implementation("com.squareup.okhttp3:okhttp:4.9.3")  上面已包含implementation 'com.squareup.retrofit2:retrofit:2.9.0'implementation 'com.squareup.retrofit2:converter-gson:2.9.0'//    日志拦截implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'

6、viewBinding

 

 


http://chatgpt.dhexx.cn/article/XnfV5I3S.shtml

相关文章

Android 快速开发框架 集成框架

由于自己经常写项目&#xff0c;没有一个方便开发的一套框架怎么行&#xff0c;所以在日常开发总自己整理了一套&#xff0c;请各位过目&#xff0c;不喜勿喷。一个新项目搭建需要具备的环境:先导入我制作的jar包。添加必要的权限。需要一个Application初始化数据,下面开始调用…

Android应用-开发框架设计

目录 1. &#x1f4c2; 简介 1.1 背景 1.2 专业术语 2. &#x1f531; 总体设计思想 2.1 分层&#xff1a;组件化设计框架 2.2 分类&#xff1a;应用开发架构图 3. ⚛️ 框架详细设计 3.1 组件化框架外形 3.2 业务模块化 3.3 代码编程框架 4. &#x1f4a0; 框架其他…

Android常用框架

1.缓存框架 1.1DiskLruCache&#xff1a;Java实现基于LRU的磁盘缓存&#xff0c;DiskLruCache不是google官方所写&#xff0c;但是得到了官方推荐&#xff0c;DiskLruCache没有编写到SDK中去&#xff0c;如需使用可直接copy这个类到项目中去。使用场景&#xff1a;如“清除…

Android开发框架大全

包括各种快速开发框架、测试框架、系统框架、插件补丁框架、设计模式框架、主题切换框架。 android-tips-tricks&#xff1a; https://github.com/nisrulz/android-tips-tricks Android 开发的一些 Tips 集合 Android-Code-Style&#xff1a; https://github.com/LoranWong/And…

Android开发常用开源框架

Android开源框架系列 Android开源项目 Android开发常用开源框架2 Android开发常用开源框架3 GitHub上最火的Android开源项目,所有开源项目都有详细资料和配套视频 2017年伊始&#xff0c;你需要尝试的25个Android第三方库 Android开发常用第三方平台 免费的计算机编程类中…

Android开发框架模式(MVC、MVP、MVVM)实例解析

Android项目中&#xff0c;尤其是比较大型的项目开发中&#xff0c;模块内部的高聚合和模块间的低耦合性就显得尤为重要了。所以我们一般情况下需要为项目设计一种框架模式&#xff0c;通常情况下我们一般用到的三种MVC、MVP、MVVM。 通过框架模式设计的项目能够极大的提高开发…

LDA主题模型评估方法–Perplexity

在LDA主题模型之后,需要对模型的好坏进行评估,以此依据,判断改进的参数或者算法的建模能力。 Blei先生在论文《Latent Dirichlet Allocation》实验中用的是Perplexity值作为评判标准。 一、Perplexity定义 源于wiki:http://en.wikipedia.org/wiki/Perplexity perplexity是一…

LDA困惑度perplexity的一些个人理解

纠结这个问题很久了&#xff0c;期间主要去了gensim的google论坛&#xff0c;以及在StackOverflow、StackexChange用关键词topic number perplexity搜了下&#xff0c;得到这些很模糊的认识&#xff1a; 1. gensim的log_perplexity()解读&#xff1a; 根据gensim3.8.3的源码&…

NLP基础知识点:困惑度(Perplexity)

本篇内容翻译自Speech and Language Processing. Daniel Jurafsky & James H. Martin. 链接&#xff1a;https://web.stanford.edu/~jurafsky/slp3/ 不愧是自然语言处理领域的圣经&#xff0c;读起来流畅自然&#xff0c;以后还是要多读经典。 困惑度&#xff08;Perplexit…

Python LDA gensim 计算 perplexity

转载自 https://blog.csdn.net/qq_23926575/article/details/79472742 1.LDA主题模型困惑度 这部分参照&#xff1a;LDA主题模型评估方法–Perplexity&#xff0c;不过后面发现这篇文章Perplexity(困惑度)感觉写的更好一点&#xff0c;两篇都是翻译的维基百科。 perplexity是一…

困惑度 (perplexity)

困惑度 (perplexity) 在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好。 对于LDA模型,最常用的两个评价方法困惑度(Perplexity)、相似度(Corre)。 其中困惑度可以理解为对于一篇…

Metric评价指标-Perplexity语言模型

欢迎关注知乎&#xff1a; 世界是我改变的 知乎上的原文链接 一. 原理介绍 在研究生实习时候就做过语言模型的任务&#xff0c;当时让求PPL值&#xff0c;当时只是调包&#xff0c;不求甚解&#xff0c;哈哈哈&#xff0c;当时也没想到现在会开发这个评价指标&#xff0c;那现…

perplexity和预训练时用的loss的区别

Perplexity和预训练时用的loss都是用来评估语言模型的性能的指标&#xff0c;但是它们的计算方式和意义有所不同。 Perplexity是一种用来衡量语言模型对一个测试集的预测能力的指标。它的计算方式是将测试集中的所有句子输入到语言模型中&#xff0c;计算每个句子的困惑度&…

技术干货 | 基于MindSpore详解Perplexity语言模型评价指标

01 原理介绍 在研究生实习时候就做过语言模型的任务&#xff0c;当时让求PPL值&#xff0c;当时只是调包&#xff0c;不求甚解&#xff0c;哈哈哈&#xff0c;当时也没想到现在会开发这个评价指标&#xff0c;那现在我来讲一下我对这个指标的了解&#xff0c;望各位大佬多多指…

Perplexity定义

Refer from http://blog.csdn.net/pipisorry/article/details/42460023 http://blog.csdn.net/pipisorry/article/details/42460023 熵/信息熵 Perplexity定义 perplexity是一种信息理论的测量方法&#xff0c;b的perplexity值定义为基于b的熵的能量&#xff08;b可以是一个概…

gensim---LDA---perplexity

以下内容来源于https://blog.csdn.net/qq_25073545/article/details/79773807 使用gensim实现lda&#xff0c;并计算perplexity&#xff08; gensim Perplexity Estimates in LDA Model&#xff09; Neither. The values coming out of bound() depend on the number of topi…

世界上第一个会话搜索引擎——Perplexity AI使用测评

引言 比起传统的列表式搜索&#xff0c;Perplexity AI把艳惊四座的ChatGPT和必应搜索结合起来&#xff0c;既有ChatGPT式的问答&#xff0c;又像普通搜索引擎那样列出链接&#xff0c;就连马斯克也亲自称赞&#xff1a;它不仅总结出了推文的由来&#xff0c;还将推文的内容解释…

主题模型TopicModel:LDA主题模型的评估

http://blog.csdn.net/pipisorry/article/details/42460023 基础知识&#xff1a;熵 [熵与互信息] 皮皮blog Perplexity定义 perplexity是一种信息理论的测量方法&#xff0c;b的perplexity值定义为基于b的熵的能量&#xff08;b可以是一个概率分布&#xff0c;或者概率模型…

语言模型常用评价方法:perplexity、bleu

目录 1. perplexity&#xff08;困惑度、复杂度&#xff09; 2. BLEU 代码实现 1. perplexity&#xff08;困惑度、复杂度&#xff09; 更多详细&#xff0c;参考&#xff1a;详解语言模型NGram及困惑度Perplexity 语言模型&#xff1a;语言模型可以表示为一个计算 的模型&a…

LDA主题模型绘制困惑度(perplexity)-主题数曲线——python

主题建模作为一种基于机器学习的文本内容分析技术&#xff0c;一般用于推断文本文档中隐藏主题的技术。很多研究使用了基于Latent Dirichlet Allocation (LDA)的主题建模算法来处理大规模文档并识别潜在主题。LDA主题模型已经在多个研究领域得到应用&#xff0c;且都有着不俗表…