
Android
文章平均质量分 57
android
PrinciplesMan
一个人的生命是应该这样度过的:当他回首往事的时候,不因虚度年华而悔恨,也不因碌碌无为而羞耻。
展开
-
RecyclerView与CheckBox结合使用
RecyclerView中每个item中存放CheckBox,实现全选,全不选,删除选中数据,全部删除等功能1.界面的效果2.Adapterpublic class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> implements View.OnClickListener { private Context context; .转载 2021-09-01 15:53:17 · 541 阅读 · 0 评论 -
JAVA Map集合的方法使用和属性
Map是Collection的子接口,具有映射关系的键值对此接口取代 Dictionary 类,Dictionary是一个抽象类,而不是一个接口。给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键 来访问对应的值。当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。当在不允许使用Null对象的Map中使用Null对象,会抛出一个转载 2021-09-01 15:48:15 · 505 阅读 · 0 评论 -
从Map中 取出第一个key/第一个value的方法
从Map中取出第一个 key 和 value 的方法,使用Map.Entry进行操作; 可与LinckedHashMap(按元素存入顺序排序的有序Hash表)搭配使用;实现特定的业务要求;/** * 获取map中第一个key值 * * @param map 数据源 * @return */ private static String getKeyOrNull(Map<String, Object> map) { Str...转载 2021-09-01 15:35:09 · 5626 阅读 · 0 评论 -
kotlin中的Map集合类
Kotlin中的Map分为:只读Map。可变的MutableMap(MutableMap、HashMap、LinkedHashMap)。Map源码:private object EmptyMap : Map<Any?, Nothing>, Serializable { private const val serialVersionUID: Long = 8246714829545688274 override fun equals(other: Any?): Boo...转载 2021-09-01 15:28:31 · 540 阅读 · 0 评论 -
Android 获取目录下文件个数
Filefile=newFile(filePath);File[]files=file.listFiles();原创 2021-08-30 15:19:07 · 1514 阅读 · 0 评论 -
Android 文件存储位置梳理
所有的安卓设备都有外部存储和内部存储,这两个名称来源于安卓的早期设备,那个时候的设备内部存储确实是固定的,而外部存储确实是可以像U盘一样移动的。 在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。所以不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机自带的存储(外部存储)。...转载 2021-08-24 18:08:54 · 8967 阅读 · 0 评论 -
GreenDao 多表操作事务管理
场景:Android APP多表操作事务管理使用Android自带的sql操作类操作的时候需要手动处理事务,使用GreenDao的时候不用管了,啥都处理好了。但是,如果是多表操作的话,怎么统一管理事务?关键思想是事务嵌套,具体方法使用:DaoSession().callInTx()看源码可以知道callInTx里面有一层事务管理,实际调用insert、update之类的具体方法的时候,里面还有一层事务。进行事务嵌套后,只要内层的事务有一个操作失败,最外层的事务就认为整个事务都失败,其他操转载 2021-08-23 17:26:15 · 1021 阅读 · 0 评论 -
解决ADB错误“more than one device and emulator”的方法
1.什么情况下出现该问题?输入adb命令操作设备,但多个设备连接了电脑,导致adb无法识别操作具体哪台设备2.解决办法如果输入adb devices,显示List of devices attachedDG4064b7ac4408 deviceemulator-5556 device1.若想选择第一台设备操作,执行命令adb -s DG4064b7ac4408 shell,进入该设备操作2. 如不想进入设备shell模式,则执行 adb -s DG4064b7ac4408 指...转载 2021-08-11 18:09:56 · 3613 阅读 · 0 评论 -
RecyclerView中使用CheckBox勾选混乱问题解决以及单选功能的实现
一.RecyclerView + CheckBox勾选混乱问题解决RecyclerView中使用CheckBox时因为RecyclerView布局会重用,所以在勾选时出现勾选混乱。如图勾选 0号位和2号位 21 23也被勾选了。此时适配器中的代码@Overridepublic void onBindViewHolder(ViewHolder holder, final int position) { holder.mTextView.setText(mList.get(positi..转载 2021-08-03 10:08:39 · 837 阅读 · 0 评论 -
安卓—自定义 AlertDialog 的样式
自定义修改安卓弹出框的样式效果图:1.在style.xml下添加 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!-- 自定义弹出样式 --> <style name="MyDialogStyle"parent="Theme.AppCompa...转载 2021-07-27 08:54:01 · 1316 阅读 · 0 评论 -
科大讯飞语音识别SDK Android集成痛点
1.直接运行官方demo各种错误,所以直接放弃2. 新建工程,以module的方式引用语音识别包成功。 1)语音权限 动态添加权限 2)appid 记得替换,要与sdk lib库同步 3)语音识别结果记得使用JsonParser.parseIatResult 工具类解析下...原创 2021-07-22 19:47:41 · 645 阅读 · 1 评论 -
Android targetSdkVersion你真的了解吗?
先抛出一个问题:我们的应用开发的时候android最新版本是6.0,当一年过去之后,7.0发布了,那么我们的应用在7.0手机上是否还能运行?会奔溃吗?根据我们的实际经验,觉得应该不会奔溃,可能有些功能会有问题,但是具体是那一块呢?又说不太好,这就涉及到了Android的向前兼容的问题了。我们在创建App的时候经常会设置这几个参数android { compileSdkVersion 23 buildToolsVersion “23.0.1” defaultConfig { ...转载 2021-07-22 10:02:45 · 2734 阅读 · 1 评论 -
为什么Android 定位SDK获取不到定位的速度[getSpeed()]、角度[getBearing()]、海拔[getAltitude()]?
速度、角度和海拔数据来源自哪里?精准的速度(Speed)、角度(Bearing)、海拔(Altitude)数据来自设备GPS模块,也就是当GPS模块正常工作情况下,且设备在移动时会返回以上三种数据。所以当以上三种数据返回负数说明GPS状态现在是太好的,无法准确计算结果。如果返回0意味着GPS状态可用,但设备没有移动。为何高精度定位模式不能每次都返回这三项数据?在高精度定位模式下会采用GPS定位混合网络定位的方式。开启持续高精度定位,如果此时GPS模块没有正常工作是无法正常返回角度、速度、..转载 2021-07-08 19:59:59 · 816 阅读 · 0 评论 -
gradle文件中引入其他gradle文件
背景: 安卓项目中,gradle文件也逐渐变得臃肿起来,需要分开管理,否则一大堆在一起,就很难维护了。解决方案: 采用apply from: 'xx.gradle'这样的语句就可以引入其他gradle文件了。Demo(集成aspectj): 1.aspectj.gradle (存放目录: 项目根目录下)import org.aspectj.bridge.IMessageimport org.aspectj.bridge.MessageHandlerimport ...转载 2021-07-07 10:28:04 · 4077 阅读 · 0 评论 -
android 自定义alertdialog和取消dialog
看代码:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn)转载 2021-07-02 09:02:55 · 526 阅读 · 0 评论 -
android获取本地图片并显示图片
import java.io.FileNotFoundException;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.util.Log;.转载 2021-07-01 19:04:21 · 2165 阅读 · 0 评论 -
Android 文件绝对路径和Content开头的Uri互相转换
工作中遇到的问题。拍照获取图片后是得到的路径是 file:///storage/emulated/0/Android/data/com.zehin.mingchuliangzao3/cache/PostPicture/20160905182015.jpg 但是我想要的路径是: content://media/external/images/media/212304 这种 Uri类型的查阅资料找到如下方法转Uri /** * Ge转载 2021-07-01 17:14:47 · 21212 阅读 · 0 评论 -
Android开发——集成Tinker热更新框架出现java.lang.NoClassDefFoundError
前言在Android开发当中,Tinker热更新是很常见的使用框架,但是我今天在集成的时候却出现异响不到的事情,出现bug了。应用启动出现Tinker.UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.NoClassDefFoundError: Failed resolution of: Lcom/tencent/tinker/entry/ApplicationLike;出现问题的依赖model中的远程依赖//更新应用转载 2021-06-28 11:36:17 · 497 阅读 · 0 评论 -
Android中的复制粘贴
The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的剪贴板里。 clip object可以有三种形式: Text:文字字符串。 文字是直接放在clip对象中,然后放在剪贴板里;粘贴这个字符串的时候直接从剪贴板拿到这个对象,把字符串放入你的应用存储中。 URI:一个Uri对象。 表示任何形式的URI。这种形式主要用于从一个content provider.转载 2021-06-26 16:37:48 · 24942 阅读 · 0 评论 -
open failed: EISDIR (Is a directory)
androidopen failed: EISDIR (Is a directory)错误一、我是需要从 一个目录下copy一个文件到另一个目录下,遇到 这个问题后,首先上网查了,然后根据网上的方案解决,还是解决不了,后来仔细的看自己的代码,终于找到问题,解决bug,记录一下。二、异常说明:这个异常表明程序应该是对一个文件进行操作,而你传入程序的是一个文件夹对象。网上的解决办法:1、这个异常是因为在创建目录文件夹的时候,应该一层一层的创建文件夹,例如:我要创建"/sdcard/Downl.转载 2021-06-25 10:26:19 · 6225 阅读 · 0 评论 -
java的File.renameTo(File)方法
以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名、移动文件的目的。不过后来经常发现问题:File#renameTo(File)方法会返回失败(false),文件没有移动,又查不出原因,再后来干脆弃用该方法,自己实现一个copy方法,问题倒是再也没有出现过。昨天老板同学又遇到这个问题,File#renameTo(File)方法在windows下面工作的好好的,在linux下偶尔又失灵了。回到家我扫了一遍JDK中File#renameTo(Fil转载 2021-06-25 09:53:09 · 1500 阅读 · 0 评论 -
Android之多线程实现方式及并发与同步
前言:说到多线程,就不得不先说它和进程的关系,这里先简单解释一下,当一个app程序启动时系统默认有一个进程和主线程,在程序运行中想要异步操作,就会创建不止一个子线程即多线程。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。一、多线程实现方式:(三种)1、继承Thread类,重写r转载 2021-06-24 10:33:18 · 4124 阅读 · 0 评论 -
applicationId和packageName,以及${applicationId}写法
applicationId理论上来讲applicationId是android设备以及google play所公认的唯一标示。若未配置applicationId时,google play无法上线(据查)配置applicationId可以用作同一工程发布略有差异的不同apk,比如收费版和免费版、代码相同标示不同的渠道包等一般配置android { ...... defaultConfig { applicationId "sp.com.learncomposite"...转载 2021-06-22 16:00:43 · 1225 阅读 · 0 评论 -
Android JSONArray转List
List<bea> zjTvOrdersPlusOne = JSONArray.parseArray(zjTvStringWeeklyPlusOne, ZjTvOrder.class); //zjTvStringWeeklyPlusOne为JSON字符串原创 2021-06-05 17:27:15 · 1870 阅读 · 7 评论 -
GreenDao 直接执行SQL的方法
try { DaoSession session=MyApplication.getInstances().getDaoSession(); long fromId=-1; String strSql="select * from test order by ID desc limit 0,1 "; Cursor c ...转载 2021-06-05 17:24:13 · 1078 阅读 · 0 评论 -
GreenDao: java.lang.IllegalStateException: Couldn‘t read row 0, col -1 from CursorWindow异常
背景:Android SQLite异常:java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow可能出现这个异常的几种情况:请求的字段在数据库的表中不存在,一般是大小写没写对;字段类型不匹配,比如blob 与 varchar...转载 2021-06-05 17:22:34 · 483 阅读 · 0 评论 -
Failed to connect to raw.githubusercontent.com:443
完整报错:curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused简单解决办法:设置DNS为114.114.114.114或者8.8.8.8原创 2021-05-24 09:27:17 · 518 阅读 · 0 评论 -
Sqlite .db-shm和.db-wal文件
.db-wal文件wal意思是write-ahead log,顾名思义就是保存的一个日志,对于提交/回滚目的很有用。 sqlite3.7之后开始提供这个功能,当一个数据库采用WAL模式,所有连接数据的操作都必须使用WAL,然后在在数据库文件夹下生成一个后缀为.db-wal的文件保存操作日志。该日志使SQLite可以在事务失败时回滚更改。 SQLite如何使用它们以及为什么将它们保留这么长时间取决于SQLite的作者。如果数据库未在运行,则删除该文件是完全可以的,实际上,如果存在该文件,它将在重新启动数据.转载 2021-05-21 20:58:00 · 2891 阅读 · 0 评论 -
sqlite的wal模式
原文:https://www.sqlite.org/wal.html预览SQLite实现原子提交和回滚的默认方法是回滚日志。从3.7.0版本(2010-07-21)开始,可以使用一个新的“写前日志”选项(以下称为“WAL”)。wal模式优点大部分情况下,wal模式要比其他模式快很多; wal提供了更多的并发性,读时不会阻塞写,写时不会阻塞读; 使用wal使得磁盘IO操作更加连续; wal使用的fsync()操作要少得多,因此在fsync()系统调用中断的系统上,不太容易出现问题;wa转载 2021-05-21 20:56:56 · 3194 阅读 · 0 评论 -
GreenDao使用SQLite的WAL模式
GRDB使用SQLite的WAL模式WAL全称是Write Ahead Logging,它是SQLite中实现原子事务的一种机制。该模式是从SQLite 3.7.0版本引入的。再此之前,SQLite使用Rollback Journal机制实现原子事务。在Rollback Journal机制中,当需要修改数据时,先把被修改的数据备份出来,然后把数据库的数据修改。如果事务成功,就把备份数据删掉;如果事务失败,则恢复备份数据。这个机制的缺点是读写频繁,并且写的时候,不能读取。而WAL模式的工作..转载 2021-05-21 20:55:29 · 518 阅读 · 0 评论 -
android删除指定目录下文件及目录
/*** 删除指定目录下的文件及目录*/public static deleteFolderFile(String filePath, boolean deleteThisPath){if (!TextUtils.isEmpty(filePath)) {File file = new File(filePath);if (file.isDirectory()) {File files[] = file.listFiles();for (int i = 0; i < files.len.转载 2021-05-21 15:06:34 · 2203 阅读 · 0 评论 -
GreenDao简明教程(查询,Querying)
这是一篇关于greenDao的简明使用教程(其实就是官网tutorial的一个大概的翻译)。一共有四篇,链接如下:1.基本介绍2.实体建模3.查询4.关系查询查询接口返回符合指定条件的实体对象集合.你可以使用SQL组织你的查询语句,或者采用更好的方法,使用greenDao的QueryBuilder API.greenDao的查询也支持延迟加载结果,当结果集很大的时候,它会节省内存和提高性能.1.QueryBuilderQueryBuilder类让你不需要写SQ...转载 2021-05-15 11:27:07 · 4081 阅读 · 0 评论 -
安卓GreenDao框架一些进阶用法整理
大致分为以下几个方面:一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值一、查询指令整理1.链式执行的指令 1 2 3 4 5 returnmDaoSession.getUserDao().queryBuilder(). XXX. XXX. XXX. list(); 一般......转载 2021-05-12 17:27:16 · 1121 阅读 · 0 评论 -
优雅的更新(update)GreenDAO表中的整列
码字辛苦!转载请注明出处!今天博主碰到一个需求,是一个页面的总开关,点击后要切换数据库中对应表的一整列:先上正确的更新方式,知道你们都是火急火燎的想直接拿走: public void switchAll(boolean isChecked) { //获取对象DAO ApplicationInfoDao applicationInfoDao = daoSession.getApplicationInfoDao(); //获取......转载 2021-05-12 17:00:45 · 1367 阅读 · 0 评论 -
GreenDao 查询(in用法)
两个表关联查询原生语句: select * from city where id in (select cityid from deliveryplace)GreenDao语句:List<City> list = DBCore.getDaoSession().getCityDao().queryBuilder() .orderAsc(CityDao.Properties.Pinyin) .where......转载 2021-05-12 15:55:02 · 1547 阅读 · 0 评论 -
greenDao多表关联
之前我们看到了greenDao的简单使用,但是就这些是远远不够的,有时候我们需要存储的数据较为复杂,这个时候我们可能需要使用到多表关联的操作。ToOne一对一的关系映射。看个例子: @Entity public class Score { @Id private String id; private int score; } @Entity public class Student { @Id ..转载 2021-05-11 22:22:37 · 754 阅读 · 0 评论 -
Android系列之GreenDao连表查询(二)
背景上一篇文章 Android系列之GreenDao基本使用(增、删、改、查)给大家介绍的GreenDao最基本的用法。看完上篇文章之后,大家对于基本的增删改查应该都已经学会了。那么这篇文章就给大家介绍下在GreenDao中如何进行连表查询。GreenDao内置的注解@ToMany @ToOne连表查询无非是这三种情况:1.一对一 @ToOne2. 一对多 @ToMany3. 多对多 @ToMany //@JoinEntity注解:entity 中间表;sourceProper转载 2021-05-11 22:19:44 · 1487 阅读 · 0 评论 -
GreenDao Currently only single FK columns are supported: ToOne ‘dpObjectsDB‘
greendao设置一对一bean报错如下:Currently only single FK columns are supported: ToOne 'dpObjectsDB' from DpPointsListDB to DpObjectsDB解决办法:YourDpObjectsDBclass is missing an@Idproperty.参考:https://github.com/greenrobot/greenDAO/issues/886......原创 2021-05-11 17:32:53 · 408 阅读 · 0 评论 -
apk解包+修改源码+重新打包 修改Android端app教程 修改apk文件教程
修改之前一定要先安装java开发环境,不会装的去自行百度。文章较长,耐心阅读。一直在做Android应用开发,但对于从自己手中输出的apk包,了解并不是很深。最近想研究一下,消除下自己的一些技术盲点。好吧,废话少说,先切入主题。这篇文章主要介绍如何获取apk包中的dex文件,并简单修改里面的源码,再重新打包生成apk文件。下面提供对HelloWorld.apk的解包,修改源码,重新打包的过程。1 需要用到的工具:baksmali:把dex文件转换成smali文件的工具(dex文件无.转载 2021-04-30 16:02:40 · 20205 阅读 · 8 评论 -
已混淆和未混淆对Apk反编译后的影响
这里做个测试使用Smali2Java工具对apk进行反编译未混淆 如 ↓已混淆 如 ↓可以看出来未混淆后很多工具类反编译可以直接看出你的命名规则,甚至内部变量参数赋值也能很直观的看到,所以混淆很有必要!而混淆之后所有的类都会被打乱成a b c增加了理解难度。增加了破解的难度,防止不必要的危险发生......转载 2021-04-30 13:18:06 · 578 阅读 · 0 评论