自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Android中EventBus的简单使用

Android系统内置的事件通讯存在缺点:Android系统中的事件通信则是 handler (消息机制) 和 BroadCastReceiver (广播机制), 通过它们可以实现组件之间的事件通讯。缺点在于,代码量多、组件之易产生藕合引用。

2023-12-21 14:17:37 1733

原创 Android动画(四)——属性动画ValueAnimator的妙用

ValueAnimator是ObjectAnimator的父类,它继承自Animator。ValueAnimaotor同样提供了ofInt、ofFloat、ofObject等静态方法,传入的参数是动画过程的开始值、中间值、结束值来构造动画对象。可以将ValueAnimator看着一个值变化器,即在给定的时间内将一个目标值从给定的开始值变化到给定的结束值。上一篇中我们提到,在使用ValueAnimator时通常需要添加一个动画更新的监听器,在监听器中能够获取到执行过程中的每一个动画值。

2023-12-17 15:38:00 779

原创 Android动画(三)——属性动画

Android属性动画是一种强大的动画系统,它可以用于在Android应用程序中创建平滑的动画效果。属性动画的作用效果就是:在一个指定的时间段内将对象的一个属性的属性值动态地变化到另一个属性值。属性动画的核心概念是值动画器(ValueAnimator)和对象动画器(ObjectAnimator)。值动画器可以通过指定起始值和结束值来创建动画,然后可以通过监听动画的更新事件来更新视图的属性。对象动画器则更加灵活,可以直接对对象的属性进行动画处理。

2023-12-17 15:26:21 487

原创 Android动画(一)——逐帧动画

Android动画是一种用于创建视觉效果和交互体验的技术,可以增强用户界面的吸引力和响应性。Android提供了丰富的动画框架和API,使开发者可以轻松地添加动画效果到他们的应用程序中。

2023-12-16 23:26:37 574

原创 Android动画(二)——补间动画

补间动画(Tween Animation)是一种常见的动画技术,用于在动画序列中创建平滑的过渡效果。它通过定义起始状态和结束状态之间的差异来自动生成中间帧,从而实现连续的动画效果。补间动画通常涉及两个关键帧(Keyframe):起始关键帧和结束关键帧。起始关键帧定义了动画的初始状态,而结束关键帧定义了动画的最终状态。通过在这两个关键帧之间进行插值计算,可以生成一系列中间帧,形成平滑的动画过渡。在补间动画中,可以对多个属性进行动画化,如位置、大小、旋转、透明度等。

2023-12-16 23:26:30 561

原创 Android组件化基础(二)——组件间的通信

书接上回组件化后,不同组件之间没有相互依赖,模块间的跳转就不能再通过 startActivity() 这种方式,比较常用的是,GitHub 的项目主页上对于使用方法介绍的已经很详细,这里我们就简单说说。

2023-12-10 23:33:20 1550

原创 Android组件化基础(一)——概述与基本配置

随着项目逐渐扩展,业务功能越来越多,代码量越来越多,开发人员数量也越来越多,随之而来的就是各种各样的烦恼:项目模块多且复杂,编译一次要5分钟甚至10分钟?太慢不能改了一行代码 或只调了一点UI,就要run整个项目,得再忍五到十分钟、合代码经常发生冲突。被人偷偷改了自己模块的代码。做一个需求,发现还要去改动很多别人模块的代码。别的模块已实现的类似功能,自己要用只能去复制一份代码再改改“这个不是我负责的,我不管”,代码责任范围不明确只做了一个模块的功能,但改动点很多,所以要完整回归测试。

2023-12-10 23:08:01 297

原创 Android轮播图的画廊效果

在Android中,轮播图的画廊效果通常是指一种类似于画廊(Gallery)或者类似于卡片堆叠的视觉效果,使得轮播图在切换时更具有层次感和独特的动画效果。这种效果能够吸引用户的注意力,提升用户体验。以下是一些常见的画廊效果的介绍:1.画廊效果特点:轮播图的多张图片以层叠的方式呈现,一般只显示当前焦点图片的中心部分,使得前后图片部分可见。图片切换时通过位移动画,使得前后图片以不同的层次感切入或切出。当前焦点图片通常会被放大或者突出显示,以吸引用户的注意。

2023-12-03 21:10:19 659

原创 Android中的Banner轮播图的使用

Banner轮播图是一种常见的移动应用界面设计元素,用于展示多张图片或广告,并支持自动切换。它通常以水平方向循环滚动的形式呈现,用户可以通过手动滑动或自动播放查看不同的内容。以下是一份详细介绍Banner轮播图的内容:1.用途和场景:用于应用中展示广告、推广内容等。用于突出显示应用中的重要信息、特色功能等。在应用启动时,通过轮播图引导用户了解应用的特性。2.基本特征:支持自动切换轮播图内容,增强用户体验。允许用户通过手势滑动切换轮播图,提供交互性。

2023-12-03 20:08:02 1093 1

原创 Android底部导航栏的实现(BottomNavigationView),结合ViewPage

首页底部tab栏用 BottomNavigationView,我们可以创建一个menu文件来给tab栏按钮设置样式。BottomNavigationView 控件引用该menu,来显示底边按钮。步骤:右键res文件夹 -> New -> Dirctory -> 命名 “menu” -> 右键menu文件夹 -> New -> Menu Resource File.光这样还不够,我们还要实现页面和底部按钮的绑定。这一行代码引用类我们刚刚的menu布局文件。在该布局文件中,我设置了标题和图片资源。

2023-11-27 08:30:00 452

原创 AutoCompleteTextView(可实现模糊搜索)

AutoCompleteTextView是Android中的一个视图控件,它是EditText和ListView的组合。它提供了自动完成文本输入的功能,并显示与用户输入相匹配的建议列表。AutoCompleteTextView的主要特性和用途如下:自动完成功能:AutoCompleteTextView通过监视用户的文本输入,在用户输入时自动弹出与输入内容相匹配的建议列表。用户可以从列表中选择一个建议项,或继续输入以缩小建议列表。

2023-11-26 21:30:52 912

原创 数据库Room实现模糊搜索(Java)

这部分也是Room用法中最关键的地方,因为所有访问数据库的操作都是在这里封装的。访问数据库的操作无非就是增删改查这4种,但是业务需求却是千变万化的。而Dao要做的事情就是覆盖所有的业务需求,使得业务方永远只需要与Dao层进行交互,而不必和底层的数据库打交道。那么下面我们就来看一下一个Dao具体是如何实现的。新建一个UserDao接口@Dao@Update@Delete@Insert注意看,实现模糊搜索的语句是这一段。

2023-11-26 20:19:30 1461

原创 Jetpack之Room

我们虽然学习SQLite数据库的使用方法,不过当时仅仅是使用了一些原生的API来进行数据的增删改查操作。这些原生API虽然简单易用,但是如果放到大型项目当中的话,会非常容易让项目的代码变得混乱,除非你进行了很好的封装。为此市面上出现了诸多专门为Android数据库设计的ORM框架ORM (Object Relational Mapping)也叫对象关系映射。简单来讲,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是ORM了。

2023-11-12 20:36:00 104

原创 Jatpack之LiveDate

LiveData的基本用法虽说可以满足大部分的开发需求,但是当项目变得复杂之后,可能会出现一些更加特殊的需求。LiveData为了能够应对各种不同的需求场景,提供了两种转换方法:map()和switchMap()方法。下面我们就学习这两种转换方法的具体用法和使用场景。

2023-11-12 17:57:54 83

原创 Jatpack之Lifecycle

在编写Android应用程序的时候,可能会经常遇到需要感知Activity生命周期的情况。比如说,某个界面中发起了一条网络请求,但是当请求得到响应的时候,界面或许已经关闭了,这个时候就不应该继续对响应的结果进行处理。因此,我们需要能够时刻感知到Activity的生命周期,以便在适当的时候进行相应的逻辑控制。这种需求是广泛存在的,同时也衍生出了一系列的解决方案,比如通过在Activity中嵌入一个隐藏的Fragment来进行感知,或者通过手写监听器的方式来进行感知,等等。但是这种方法不够优雅。

2023-11-10 10:08:39 78

原创 Jatpack之ViewModel

ViewModel应该可以算是Jetpack中最重要的组件之一了。其实Android平台上之所以会出现诸如MVP、MVVM之类的项目架构,就是因为在传统的开发模式下,Activity的任务实在是太重了,既要负责逻辑处理,又要控制UI展示,甚至还得处理网络回调,等等。在一个小型项目中这样写或许没有什么问题,但是如果在大型项目中仍然使用这种写法的话,那么这个项目将会变得非常臃肿并且难以维护,因为没有任何架构上的划分。

2023-11-10 09:50:05 75

原创 Android Retrofit的基本使用

retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数、Header、Url等信息,之后由okhttp来完成后续的请求工作。

2023-11-08 22:43:34 336

原创 中缀表达式转后缀表达式

10.第十个是 +,低级输入会导致出栈(这里的+号的等级小于 * 等于 + ,所以栈中的 * 和 +好都会出栈,然后第十个加号入栈)12.第十二个是除 / ,符号比较优先级 ,除法的优先级高于加法,只有低输入才会导致出栈,-所以这里直接入栈。7.第七-个是右括号,括号是优先级最低的,特殊,我们直接找到左括号,将括号中的东西减号(-)出栈。5.第五个是减号, 我们需要判断栈顶的符号,左括号的优先级是最小的,这里直接将减号入栈。2.第二个是+,判断栈顶的,只有低的输入才会导致出栈,因此这里将+加号入栈。

2023-10-30 13:03:23 60

原创 Android四大组件之一——内容提供器(二)

Android 的内容提供器(Content Provider)是一种组件,用于管理应用程序之间共享的结构化数据。内容提供器允许应用程序将数据暴露给其他应用程序,从而实现数据共享和交互。内容提供器的主要功能包括:数据存储和检索:内容提供器可以用于存储和检索持久化数据,例如数据库、文件系统等。它提供了一组标准的 CRUD(创建、读取、更新、删除)操作,允许其他应用程序通过 URI 和内容解析器访问数据。数据共享:内容提供器允许应用程序共享数据,使其他应用程序可以访问和使用这些数据。

2023-10-30 12:39:01 107

原创 Android四大组件之一——内容提供器(一)

在学习内容提供器值之前,我们需要先掌握另外一个非常重要的知识——Android运行时权限,因为内容提供器实例会使用到运行时权限的功能。当然不光是内容提供器,以后我们的开发过程中,也会经常用到运行时权限,因此我们必须牢牢掌握。

2023-10-29 22:39:20 107

原创 Android四大组件之一——广播

广播(Broadcast)是Android四大组件之一,用于在应用内或应用之间传递消息和通知。它允许应用程序在系统中发送事件或消息,以便其他应用程序可以接收并响应这些事件。广播分为两个主要角色:发送者和接收者。发送者是发送广播的应用程序组件,而接收者是接收和处理广播的应用程序组件。发送者发送广播后,系统会将广播传递给与接收者匹配的组件。标准广播(Normal Broadcast)和有序广播发送者发送广播后,所有匹配的接收者都会同时接收到广播。接收者之间没有优先级顺序,不能中断或拦截广播。

2023-10-29 14:32:05 1269

原创 Android之ToggleButton、Switch、CheckBox、RadioButton控件

在一组RadioButton中,只能选择其中的一个选项,选中一个RadioButton会自动取消其他RadioButton的选中状态。滑块可以水平滑动,并根据用户的操作来切换开关的状态。当RadioButton的选中状态发生改变时,会触发相应的回调方法,可以在回调方法中执行相应的操作。这个和我们的CheckBox是十分类似的,不同的点在于,这个控件可以由非选中状态通过点击事件转为选中状态,但是。当ToggleButton的状态发生改变时,会触发相应的回调方法,可以在回调方法中执行相应的操作。

2023-10-28 21:40:30 1274

原创 串的模式匹配

说到KMP,先说一下KMP这个名字是怎么来的,为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP。

2023-10-13 16:20:40 123

原创 Android后台服务

右击自建的项目->New->Service->Service。

2023-09-24 21:11:13 2568 1

原创 Failed to launch an application on all devices

有些博客说是AVD的问题,但是试跑了一下之前写的项目,都没问题,那大概率是AndroidManifest文件有问题,仔细检查一下该文件的大小写或者是权限啥的,有没有多写或者少写一些东西。

2023-09-24 20:28:08 640 1

原创 The location function has been stopped because you do not agree with the privacy compliance policy.

百度Android定位SDK自v9.2.9版本起增加了隐私合规接口,使用方式发生了改变,与旧版本不兼容,请务必确保用户同意隐私政策后调用setAgreePrivacy接口以进行SDK初始化之前的准备工作>百度地图接口,最新颁布了“隐私合规接口”。就是在百度地图获得定位时,要用户同意定位。首先实例化LocationClient时,需要捕获异常信息。

2023-09-24 20:22:58 1056 1

原创 Android持久化技术(一)

一、持久化技术数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,持久化技术提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。Android系统主要提供了三种方式用于简单地实现数据持久化功能,即文件存储,SharedPreference存储以及数据库存储。二、文件存储文件存储时Android中最基本的一种数据存储方式,它不对存储的内容进行任何格式化的处理,所有数据原封不动的保存到文件之中。因而它适合存储一些较为简单的文本数据或二进制数据。(1)存储数据到文件。

2023-09-17 20:49:35 642 1

原创 Android持久化技术(二)——使用LitePal

文章均摘自《Android第一行代码》(第二版)

2023-09-17 20:49:30 145 1

原创 使用HttpURLConnection时无法将服务器返回的数据显示出来

这个错误通常表示您的应用程序正在尝试使用不安全的HTTP协议访问网站,而Android系统不允许未经加密的网络流量(Cleartext HTTP traffic)。请注意,这会禁用应用程序的所有网络流量的加密,因此只有在测试的情况下才应该使用。在日志中会出现这样一行警告。

2023-07-31 11:37:23 269 1

原创 Android适配器(Adapter)的简单介绍

这个convertView, 从原理上讲 当ListView滑动的过程中 会有item被滑出屏而不再被使用,这时候Android会回收这个条目的view 这个view也就是这里的convertView ,当item1被移除屏幕的时候 我们会重新new一个View给新显示的item_new 而如果使用了这个convertView 我们其实可以复用它 这样就省去了new View的大量开销。当然,最后要return view,把这个我们包装好的View给回ListView,让它在列表里显示。

2023-07-30 21:47:32 622 1

原创 java.lang.IllegalArgumentException: Unknown URL content://com.example.datebasetest.provider/book/报错

这行代码解决了我的问题,原因的话,在android版本10中引入了分区存储这个概念,也叫沙盒存储机制。刚开始以为是URI写错了反复检查,发现没有问题,查询了GPT也没有解决最后在一篇博客找到了解决办法。应用程序请求的数据都要通过权限检测,不符合要求不会被放行。沙盒机制是一种安全机制,用于防止应用读取其他应用的数据。学习Android的创建内容提供器的时候遇到了这个报错。应用程序不能翻过自己的目录,去访问公共目录。而上面哪行代码就是设置使用原有存储机制的。每个应用程序都有自己的存储空间。

2023-07-28 15:25:46 472 1

原创 android:name=“org.litepal.LitePalApplication“报红

配置litepal时,前几步都做完了,可到配置LitepalApplication时加入android:name="org.litepal.LitePalApplication"的时候org.后面的一直是红色的,没办法通过,尝试过直接copy第三方jar包,可是还是报红。在倒数几行找到settings.gradle。问题后,我找到了这个解决办法。

2023-07-26 16:31:24 532 2

原创 实现简单的Android计算器

首先,让我们先来设置UI。在res资源找到values文件夹,右键设置style.xlm文件,即为按钮的样式其次,让我们在res下的drawable文件夹下新建一个select文件 ,里面是关于按钮的一些的形状、背景颜色、以及点击时变色的设置注意:颜色可以按照自己选择的背景图来设置,而不是照搬让我们重新回到activity_main.xlm,这里,我使用的是表格布局嵌套线性布局。

2023-07-23 22:00:14 1127

原创 java基础知识(9)——多线程2

也就是说在某个线程修改共享资源的时候,其他线程不能修改该资源,等待修改完毕同步之后,才能去抢夺CPU资源,完成对应的操作,保证了数据的同步性,解决了线程不安全的现象。比如:线程A用来生产包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,此时B线程必须等到A线程完成后才能执行,那么线程A与线程B之间就需要线程通信,即——同步机制的原理,其实就相当于给某段代码加“锁”,任何线程想要执行这段代码,都要先获得“锁”,我们称它为同步锁。同步锁使用Lock对象充当。

2023-06-13 15:22:04 563 1

原创 Java基础知识(8)——多线程1

Java语言的JVM允许程序运行多个线程,使用类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Thread类的特性每个线程都是通过某个特定Thread对象的run()方法来完成操作的,因此把run()方法体称为线程执行体。通过该Thread对象的start()方法来启动这个线程,而非直接调用run()要想实现多线程,必须在主线程中创建新的线程对象。

2023-06-06 15:15:11 61

原创 java基础知识(7)——异常

异常指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。代码逻辑错误,只是没有得到想要的结果,例如:求a与b的和,你写成了a-b为什么需要自定义异常类Java中不同的异常类,分别表示着某一种具体的异常情况。那么在开发中总是有些异常情况是核心类库中没有定义好的,此时我们需要根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题,某员工已在团队中等。如何自定义异常类。

2023-05-30 16:04:46 320 1

原创 java基础知识(6)

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本类型的数据不具备"对象"的特性(没有成员变量和成员方法可以调用),因此,Java针对八种基本数据类型定义了相应的引用类型:包装类(封装类)。有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。

2023-05-23 15:42:28 54 1

原创 java基础知识(5)

其实接口的概念较为抽象,可以理解为接口是一系列方法和特征的集合。方法的特征是类的组成部分,如果从编程的角度讲,JAVA的接口可以对应着java中特定的语法结构。JAVA接口与java抽象类是不一样的,抽象类可以实现某些方法,而接口不能。字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。内部类是类的第五大成员→【提示:类的五大成员是哪些?

2023-05-21 18:01:59 88

原创 java基础知识(4)

抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现>此类称为抽象类>抽象类不能实例化。>抽象类中是包含构造器的,因为子类对象实例化时,需要直接或间接的调用到父类的构造器。>抽象类中可以没有抽象方法。反之,抽象方法所在的类,一定是抽象类。>此方法即为抽象方法>抽象方法只有方法的声明,没有方法体。>抽象方法其功能是确定的(通过方法的声明即可确定),只是不知道如何具体实现(体现为没有方法体)

2023-05-14 16:36:30 89

原创 Java基础知识(3)

上边我们很明显看出是比较2个对象引用地址是否相同,但是我们平时在调用String、Integer等封装类型时的equals方法时是比较的内容是否一致而不是地址一致,如果是地址一致,那所有的String比较都是相等的,所以封装类型都重写了equals方法。在多态的场景下,我们创建了子类的对象,也加载了子类特有的属性和方法。1. 多态的概念:通俗来说,就是多种形态,那么在Java中,就是去完成某个行为,当不同的对象去完成时会产生不同的状态和表现。编译时,认为方法是左边的父类的类型的方法(即被重写的方法)

2023-05-07 17:22:21 54 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除