- 博客(177)
- 资源 (2)
- 收藏
- 关注
原创 【安卓】解析XML格式数据
这里需要搭建一个Web服务器,在这个服务器上提供一段XML文本,然后在程序里去访问这个服务器,再对得到的XML文本进行解析。首先需要下载一个Apache服务器的安装包,官方下载地址是:http://httpd.apache.org。然后一直点击“Next”,会提示让你输入自己的域名,我们随便填一个域名就可以了。之后继续点击“Next”就可以完成安装了,安装成功后服务器会自动启动。
2024-08-16 14:19:18 705
原创 【安卓】WebView的用法与HTTP访问网络
OkHttp是一个开源项目,它不仅在接口封装上做得简单易用,就连在底层实现上也是自成一派,比起原生的HttpURLConnection,可以说是有过之而无不及,现在已经成了广大Android开发者首选的网络通信库。首先需要获取HttpURLConnection的实例,一般只需创建一个URL对象,并传入目标的网络地址,然后调用一下openConnection()方法即可。添加上述依赖会自动下载两个库:一个是OkHttp库,一个是Okio库,后者是前者的通信基础。然后修改MainActivity中的代码。
2024-08-15 19:27:17 1254
原创 【安卓】Service生命周期与前台活动
在项目的任何位置调用了Context的startService()方法,相应的Service就会启动,并回调onStartCommand()方法。服务几乎都是在后台运行的,它的系统优先级还是比较低的,当系统出现内存不足的情况时,就有可能会回收掉正在后台运行的服务。如果需要服务可以一直保持运行状态,而不会由于系统内存不足的原因导致被回收,就可以考虑使用前台服务。前台服务和普通服务最大的区别就在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。
2024-08-15 10:58:11 886
原创 【安卓】Service的基本用法
新建一个ServiceTest项目,然后右击com.example.servicetest→New→Service→Service。每个Service中最常用到onCreate()、onStartCommand()和onDestroy()这3个方法其中onCreate()方法会在Service创建的时候调用,onStartCommand()方法会在每次Service启动的时候调用,onDestroy()方法会在Service销毁的时候调用。
2024-08-14 17:44:25 1069
原创 【安卓】多线程编程
注意,在这个方法中是不可以进行UI操作的。Looper:Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入一个无限循环当中,然后每当发现MessageQueue中存在一条消息时,就会将它取出,并传递到Handler的handleMessage()方法中。发送消息一般是使用Handler的sendMessage()方法、post()方法等,而发出的消息经过一系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。
2024-08-14 14:32:04 574
原创 【安卓】播放多媒体文件
在app/src/main这个目录下右击app/src/main→New→Directory,新建assets目录,在这个目录下放入一个音频文件。然后修改MainActivity中的代码。新建一个目录来放视频文件,右击app/src/main/res→New→Directory,在弹出的对话框中输入“raw”,然后修改MainActivity中的代码。在Android中播放音频文件一般是使用MediaPlayer类实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使播放音乐的工作变得十分简单。
2024-08-13 17:13:12 1345
原创 【安卓】调用摄像头和相册
新建一个CameraAlbumTest项目,然后修改activity_main.xml中的代码。此时运行程序会报一个错:Unable to decode stream: java.io.FileNotFoundException,没查到错是什么原因导致的,但是有解决方法。在res文件下找到xml目录(如果没有在res目录下新建目录)新建file,取名file_paths.xml。external-path就是用来指定Uri共享路径的,name属性的值可以随便填,path属性的值表示共享的具体路径。
2024-08-13 13:37:24 1257
原创 【安卓】连接真机和使用通知
第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,通常情况下这个参数传入0就可以了。通知的重要等级主要有IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种,对应的重要程度依次从高到低。打开手机的设置,找到关于手机,点开之后,找到开发者选项界面。
2024-08-12 17:15:42 654
原创 【安卓】自己创建内容提供器ContentProvider
uri参数用于确定查询哪张表,projection参数用于确定查询哪些列,selection和selectionArgs参数用于约束查询哪些行,sortOrder参数用于对结果进行排序,查询的结果存放在Cursor对象中返回。uri参数用于确定更新哪一张表中的数据,新数据保存在values参数中,selection和selectionArgs参数用于约束更新哪些行,受影响的行数将作为返回值返回。(6) getType() :根据传入的内容URI返回相应的MIME类型。#表示匹配任意长度的数字。
2024-08-12 11:15:04 712
原创 【安卓】访问其他程序中的数据
Android系统中自带的通讯录、短信、媒体库等程序都提供了类似的访问接口,这就使得第三方应用程序可以充分地利用这部分数据实现更好的功能。想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,可以通过Context中的getContentResolver()方法获取该类的实例,通过Uri对指定应用的表进行增删改查,其中insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方法用于查询数据。
2024-08-11 16:24:46 1100
原创 【安卓】SQLite数据库存储-创建数据库与增删改查
不同的是,当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()方法则将出现异常。第三个参数是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据,只需要将表中的每个列名以及相应的待添加数据传入即可。SQLiteOpenHelper的构造方法里接收的第四个参数代表的就是版本号,第一次输入的是1,要更新数据库,输入的值就要比上一次大。
2024-08-09 10:24:02 1481
原创 【安卓】SharedPreferences存储
SharedPreferences使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
2024-08-08 14:10:20 893
原创 【安卓】文件存储
第二个参数是文件的操作模式,主要有MODE_PRIVATE和MODE_APPEND两种模式可选,默认是MODE_PRIVATE,表示当指定相同文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。文件存储是Android中最基本的数据存储方式,它不对存储的内容进行任何格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合存储一些简单的文本数据或二进制数据。此时运行程序,在输入框中输入信息之后退出。
2024-08-08 08:41:35 1102
原创 【安卓】发送自定义广播
再在MyBroadcastReceiver中使用了abortBroadcast()方法将这条广播截断,后面的BroadcastReceiver将无法再接收到这条广播。重新运行程序,并点击“Send Broadcast”按钮,此时只有MyBroadcastReceiver中的Toast信息能够弹出,说明这条广播经过MyBroadcastReceiver之后确实终止传递了。发送有序广播只需要改动一行代码,将sendBroadcast()方法改成sendOrderedBroadcast()方法。
2024-08-07 14:36:20 1056
原创 【安卓】接收系统广播
有序广播(ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个BroadcastReceiver能够收到这条广播消息,当这个BroadcastReceiver中的逻辑执行完毕后,广播才会继续传递。所以此时的BroadcastReceiver是有先后顺序的,优先级高的BroadcastReceiver就可以先收到广播消息,并且前面的BroadcastReceiver还可以截断正在传递的广播,这样后面的BroadcastReceiver就无法收到广播消息了。
2024-08-07 08:43:20 946
原创 【安卓】动态加载布局技巧
其中,large就是一个限定符,那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,小屏幕的设备则还是会加载layout文件夹下的布局。最小宽度限定符(smallest-widthqualifier)允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。将多余的代码删掉,只留下一个左侧Fragment,并让它充满整个父布局。
2024-08-06 15:23:18 725
原创 安卓中Fragment的生命周期
销毁状态:Fragment总是依附于Activity而存在,因此当Activity被销毁时,与它相关联的Fragment就会进入销毁状态。停止状态:当一个Activity进入停止状态时,与它相关联的Fragment就会进入停止状态,或者通过调用FragmentTransaction的remove()、replace()方法将Fragment从Activity中移除,但在事务提交之前调用了addToBackStack()方法,这时的Fragment也会进入停止状态。
2024-08-06 09:19:52 545
原创 安卓碎片Fragment
为了方便Fragment和Activity之间进行交互,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取Fragment的实例。调用FragmentManager的findFragmentById()方法,可以在Activity中得到相应Fragment的实例,然后就能轻松地调用Fragment里的方法了。(4) 向容器内添加或替换Fragment,一般使用replace()方法实现,需要传入容器的id和待添加的Fragment实例。
2024-08-05 17:48:50 973
原创 安卓控件RecyclerVieW
Google将RecyclerView控件定义在了AndroidX中,只需要在项目的build.gradle中添加RecyclerView库的依赖,就能保证在所有Android系统版本上都可以使用RecyclerView控件了。在布局中加入RecyclerView控件也是非常简单的,先为RecyclerView指定一个id,然后将宽度和高度都设置为match_parent,这样RecyclerView就占满了整个布局的空间。修改MainActivity中的代码。修改自定义布局fruit_item.xml。
2024-08-05 11:33:09 902
原创 JAVA数据类型与运算符
当表达式1的值为true时,整个表达式的值为表达式2的值,当表达式1的值为false是,整个表达式的值为表达式3的值。位操作表示安二进制位运算,计算机中都是使用二进制来表示数据的,按位运算就是在按照二进制位的每一位一次进行计算。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。逻辑运算符主要有三个:&&(与)、||(或)、!关系运算符主要有六个:==、!表达式2:表达式3;位运算符主要有四个:&、|、~、^;移位运算符有三个:、>>>
2024-08-04 18:25:21 541
原创 HTML基础
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML文档的后缀名为.html或.htm。HTML 不是一种编程语言,而是一种标记语言,他拥有一套标记标签。HTML 使用这套标记标签来描述网页。HTML标记标签通常被称为HTML标签,HTML标签是由尖括号包围的关键词,通常是成对出现的。开始和结束标签也被称为开放标签和闭合标签。内容
2024-08-04 18:16:07 236
原创 安卓常用控件ListView
ListView是一个列表样式的 ViewGroup,将若干 item 按行排列。它是一个很基本的控件也是 Android 中最重要的控件之一。它可以实现多个 View 的垂直排列并支持滚动显示效果。新建一个项目,修改activity_main.xml中的代码。新建一个布局文件作为表头,取名view_header.xml。最后编写MainActivty.java文件。
2024-08-04 17:25:58 780
原创 安卓自定义控件
先创建一个TitleLayout文件,把它与title.xml文件关联起来。之后在activity_main.xml文件中添加这个自定义控件。--修改内容--> < com.example.uicustomviews.TitleLayout android: layout_width = " match_parent " android: layout_height = " match_parent " />
2024-08-04 15:07:52 558
原创 安卓基本布局(下)
这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角。帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个。与表格布局类似,但是比表格布局灵活。
2024-08-03 22:24:34 1324
原创 安卓常用控件(下)
在当前界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽其他控件的交互能力,因此AlertDialog一般用于提示一些非常重要的内容或者警告信息。ImageView是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩。ProgressBar用于在界面上显示一个进度条,表示我们的程序正在加载一些数据。
2024-08-02 18:44:32 533
原创 安卓常用控件(上)
需要打开res\values\themes.xml文件修改< style name=“Theme.MyApplication” parent=“Theme.MaterialComponents.DayNight.DarkActionBar”>为 < style name=“Theme.MyApplication” parent=“Theme.MaterialComponents.DayNight.DarkActionBar.Bridge”>button是程序用于和用户进行交互的一个重要控件。
2024-08-02 13:36:24 1349
原创 活动的生命周期与启动模式
当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并把在这个Activity之上的所有其他Activity统统出栈,如果没有发现就会创建一个新的Activity实例。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。在standard模式下,每当启。
2024-08-02 08:52:03 737
原创 安卓Intent
startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,在启动另一个Activity后,就可以把这些数据从Intent中取出来。使用隐式Intent,不仅可以启动自己程序内的Activity,还可以启动其他程序的Activity,这就使多个应用程序之间的功能共享成为了可能。
2024-08-01 18:00:59 1047
原创 安卓活动Activity
这里调用了setContentView()方法来给当前的Activity加载一个布局,而在setContentView()方法中,我们一般会传入一个布局文件的id。项目中添加的任何资源都会在R文件中生成一个相应的资源id,因此刚才创建的first_layout.xml布局的id现在已经添加到R文件中了。findViewById()方法获取在布局文件中定义的元素,这里传入R.id.button1来得到按钮的实例,它返回的是一个view对象所以要转换成button。设置成主Activity时,必须为true。
2024-08-01 13:37:52 916
原创 安卓项目结构与日志工具
gradlew和gradlew.bat :这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。AndroidManifest.xml :这是整个Android项目的配置文件,在程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。.gradle和.idea :这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不用编辑。
2024-08-01 09:20:17 772
原创 C#的class类
以关键字class开始,后跟类的名称、类的主体。 ……访问限制符指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private。数据类型 指定了变量的类型,返回类型 指定了返回的方法返回的数据类型。点运算符链接了对象的名称和成员的名称。
2024-07-17 14:46:31 812
原创 JAVA环境
java开发工具包JDK(java Development Kit) 包含java运行时环境JRE(Java Runtime Environment)、Java虚拟机JVM(Java Virtual Machine)。检测自己java环境是否安装好的方法是通过WIN+R调出“运行”,输入“CMD”,然后再命令行中输入“java- version”,如果安装成功,就会返回安装的版本号。文档注释: /** 文档注释 */(常见于方法和类之上描述方法和类的作用,可用来自动生成文档。单行注释:// 注释内容。
2024-07-16 18:01:02 430
原创 C#结构体、枚举与封装
结构变量通常分配在栈上,这使得它们的创建和销毁速度更快。但是,如果将结构用作类的字段,且这个类是引用类型,那么结构将存储在堆上。结构可带有方法、字段、索引、属性、运算符方法和事件,适用于表示轻量级数据的情况,如坐标、范围、日期、时间等。枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。枚举类型是使用enum关键字声明的。与类不同,结构不能继承其他的结构或类。结构不能作为其他结构或类的基础结构。
2024-07-16 10:02:53 464
原创 C#可空类型与数组
C#提供了一种特殊的数据类型,nullable类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。Null 合并运算符用于定义可空类型和引用类型的默认值。Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。数组是一个引用类型,所以需要用new关键字来创建数组。datatype:这个数组存储数据的类型。多维度存储相同类型数据的数组。交错数组是存放数组的数组。n表示数组的空间大小。
2024-07-13 21:27:29 940
原创 C#语句与方法
Access Specifier:访问限定符,决定对于另一个类的可见性。Return Type:返回值类型。Method Name:方法名Parameter List:参数列表Method Body:方法主体。
2024-07-13 17:09:27 574
原创 C#环境与数据类型
object是C#的通用类型中所有数据类型的终极基类(父类),所以object类型就可以被分配任何类型的值。反之,一个对象类型转变为一个值类型是,被称为拆箱。有两种分配形式:引号和@引号。代码中显示的写明要转换的数据类型,一般是高精度向低精度转换,或者是一个对象类型转变成另外一个数据类型。隐式转换时,将类型转换为long时,数据类型可能还是int32,因为long没有明确的长度定义,只是说他至少是32位。和C/C++中的指针类型一样,存放一个数据的地址。不需要代码指定的转换,一般是低精度向高精度的转换。
2024-07-12 19:41:06 867
原创 二叉搜索树
二叉搜索树的查找有点类似二分查找,比根节点小就去左子树,比根节点大就去右子树。最多可以查找高度次,走到空还没找到就说明这个值不存在。先是按照查找的方式来走,遇到空就把这个节点插入,这样就完成了二叉搜索树的插入。二叉搜索树又称二叉排序树或二叉查找树,是二叉树的一种,他具备以下三个特点。简单来说就是这个二叉树的所有节点都满足:左孩子
2024-07-11 18:28:35 230
Android Studio运行项目导致电脑重启
2024-08-19
qt嵌入式项目+讯飞语音
2024-02-29
idea控制台中文乱码
2023-04-13
vs报std的getline未定义
2023-04-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人