- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 Room 数据库升级问题 IllegalStateException: Migration didn‘t properly handle xxx
Migration升级数据库有时需要更改现有的数据库架构。如果我们将添加,更新或删除数据库中的某些字段然后运行我们的应用程序,我们将看到来自Room的异常:java.lang.IllegalStateException: Migration didn't properly handle xxxExpected:TableInfo{name='print_setting', columns={enable_original_amount=Column{name='enable_original_amo
2021-03-30 14:46:02
1890
1
原创 Kotlin常用标准库的扩展函数
withwith 是将某个对象作为函数的参数,在函数块内可以通过 this 指代该对象。//使用 with 之后,在 with 函数块内可以省略"content."class AppPublisherAdapter : BaseAdapter<BoundAppInfoResponse.AppInfo>() { override fun getLayoutId(viewType: Int): Int = R.layout.cell_app_publisher overri
2021-03-04 17:52:54
553
1
原创 Android命令行assemble打包
Android命令行打包打所有生产和调试包gradlew assemble 打生产或调试包gradlew assembleDebuggradlew assembleRelease只用assemble的话,gradle 会把 buildType 和productFlavors 组合打包,很显然命令越清晰,打的包就越精确,这一块也是多渠道打包的要点,主要是通过配置productFlavots去进行多渠道打包,bulidType 控制着打出的包是debug 类型还是release类型。打某个渠道
2021-02-05 16:32:39
5361
原创 Room数据库迁移
升级数据库版本时,为了迁移已有的用户数据,要定义版本之间的迁移路径,如1->2val MIGRATION_1_2: Migration = object: Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { //增加表字段 database.execSQL("ALTER TABLE pay " + "ADD COLUMN discou
2021-01-25 14:33:47
417
原创 Flutter跨组件传递数据
除了属性传值,对于数据的跨层传递,Flutter 还提供了三种方案:InheritedWidget,Notification,EventBus。InheritedWidgetInheritedWidget 是 Flutter 中的一个功能型 Widget,适用于在 Widget 树中共享数据的场景。通过它,我们可以高效地将数据在 Widget 树中进行跨层传递。Theme 类是通过 Inhe...
2020-10-23 18:03:48
996
原创 Kotlin特别之处
默认创建的类是final不可以被继承,若想要继承用open修饰。创建类时必须给予构造器,无参数可省略()val age:Int 在构造器中声明的属性为全局属性。声明在类后面的称之为主构造器,声明在下面的次构造器必须继承主构造器。次构造器的参数永远多于主构造器。对于属性有getter/setter方法,一般写在属性的后面val height:Double = 1.70 set(value...
2020-03-15 23:07:06
183
原创 Apk命令行签名
V1签名(jarsigner方式)jarsigner -verbose -keystore [ 密钥库] -signedjar [签名后的apk] [待签名的apk] [密钥库里的别名]jarsigner -verbose -keystore D:\itlao5.keystore -signedjar D:\itlao5_signed.apk D:\itlao5.apk itlao5V2签名...
2019-12-26 20:26:22
839
原创 运行微信小程序云函数项目遇到的问题
运行项目安装微信开发者工具下载源码,打开微信开发者,选择小程序导入源码,AppID改为自己申请的要设置为申请的AppID才有云开发选项。接下来申请云开发功能,进入云开发页面在存储里创建文件夹,将图片资源上传到文件夹中在数据库里创建集合,将数据导入到集合中要设置数据库用户读取权限才能拿到数据修改云开发环境env在app.js文件中,直接修改env对应的云开发环境I...
2019-10-21 18:41:16
780
原创 小程序App架构
一个项目可分为表现层,业务逻辑层,数据访问层。前端项目的架构图如下。lib:放置一些最底层,第三方库,如jquery,seajs,qrcode,echarts等,通知lib层是全公司共用一套。common:放置和项目相关的一些公共代码,如转码,工具包,公共样式设置等。service:业务逻辑层,按业务类型整合相关方法,向上暴露需要的接口方法,比如a页面需要登录和列表信息,b页面需要调用登录和...
2019-10-17 12:34:52
1026
原创 小程序Flex布局
Flex布局基本概念传统浮动和定位布局方案在处理一些特殊布局时非常不便,如垂直居中。2009年W3C提出了一种新的方案Flex布局,Flex是Flexible Box的缩写,即为弹性盒子布局,可以为传统的盒子模型带来更大的灵活性。Flex布局主要由容器和项目构成,采用Flex布局的元素,称为Flex容器(flex container),它所有直接子元素自动成为容器成员,称为Flex项目(fle...
2019-10-15 14:22:24
161
原创 Flutter 常见异常 NoSuchMethodError: The method 'drive' was called on null.
这是使用回调函数时的常见错误。/flutter: Another exception was thrown: NoSuchMethodError: The getter 'status' was called on null./flutter: Another exception was thrown: NoSuchMethodError: The method 'drive' was cal...
2019-09-20 10:55:02
8751
原创 URLEncoder的作用
URLEncoder是什么是HTML 格式编码的实用工具类。该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。对 String 编码时,使用以下规则:字母数字字符 “a” 到 “z”、“A” 到 “Z” 和 “0” 到 “9” 保持不变。特殊字符 “.”、"-"、"*" 和 "_"保持不变。空格字符 " "...
2019-09-16 18:22:11
15585
原创 通过注解限定参数类型
首先了解注解的概念。注解:给程序中的元素(类,方法,字段)添加注释。元注解:注解的注解称为元注解,来看下常见的元注解有@Retention指示注解内容要保留多久。默认为 RetentionPolicy.CLASS。RetentionPolicy 是枚举类,定义了三种保留策略。SOURCE仅在源码阶段保留,编译时会丢弃注解。CLASSClass文件中,编译器将把注解记录在类文件中...
2019-08-07 19:39:16
5228
1
原创 volatile关键字的作用
声明一个域为volatile,那么编译器和虚拟机就知道该域可能被另一个线程并发更新。Java内存模型Java内存模型定义了线程和主存之间的抽象关系:线程之间的共享变量存储在主存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程共享变量的副本。本地内存是Java内存模型的一个抽象概念,并不真实存在,它涵盖了缓存,写缓冲区,寄存器等区域。原子性,可见性和有序性原子性:操作是不可被中断的...
2019-06-12 11:00:04
168
原创 CSS基础
CSS 指层叠样式表 (Cascading Style Sheets),样式定义如何显示 HTML 元素。当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢?所有的样式会根据下面的规则层叠于一个新的虚拟样式表中,其中数字 4 拥有最高的优先权。浏览器缺省设置外部样式表内部样式表(位于 标签内部)内联样式(在 HTML 元素内部)语法CSS 规则由两个主要的部分构成...
2019-06-05 18:22:40
142
原创 HTML常用标签
HTML 指的是超文本标记语言 (Hyper Text Markup Language)标签,元素<!DOCTYPE>声明帮助浏览器正确地显示网页。HTML 也有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面。带有 HTML5 DOCTYPE 的 HTML 文档:<!DOCTYPE html>定义 HT...
2019-06-05 14:41:51
169
原创 EventBus事件分发的线程调度
在EventBus3.0之后,事件处理的方法名可以随便取。但是需要添加一个注解@Subscribe,并且可以指定线程模型。EventBus中的4种TreadMode(线程模型)POSTING(默认):事件在哪个线程发布出来的,事件处理函数就会在哪个线程中运行。事件处理使用此模式必须避免执行耗时操作,以避免阻塞可能是主线程的发布线程。MAIN:事件处理会在UI线程中执行。BACKGROUND...
2019-06-04 16:04:44
599
原创 Retrofit是怎样通过定义的接口执行网络请求的
Retrofit的基本用法创建Retrofit// 创建RetrofitmRetrofit = new Retrofit.Builder() .client(httpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(...
2019-06-03 18:15:18
434
1
原创 Android并发访问数据库
当你自己实现SQLiteOpenHelperpublic class DatabaseHelper extends SQLiteOpenHelper { ... }在单独的线程中将数据写入数据库时 // Thread 1 Context context = getApplicationContext(); DatabaseHelper helper = new DatabaseHelp...
2019-05-23 14:50:25
697
原创 Https在Android中的使用添加可信证书认证
android系统已经预置了150多个证书,服务端用的证书是从android认可的证书颁发机构购买的证书,默认情况下,是信任它们的,因此可以直接访问而无需在客户端设置什么。购买证书毕竟是花钱的,使用自签名证书就是另外一种常见的方式了。所谓的自签名证书就是没有通过受信任的证书颁发机构,自己给自己颁发的证书。最典型的就是12306火车购票,使用的证书就不是受信任的证书颁发机构颁发的,而是旗下SRC...
2019-05-22 17:56:19
3469
2
原创 Android利用HTTPS实现安全通信
HTTPS 简介HTTPS 全称 HTTP over TLS。TLS是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传输层安全协议。对 HTTP 而言,安全传输层是透明不可见的,应用层仅仅当做使用普通的 Socket 一样使用 SSLSocket 。TLS是基于 X.509 认证,他假定所有的数字证书都是由一个层次化的数字证书认证机构发出,即 CA。另外值得一...
2019-05-22 17:51:54
307
原创 Android编译时使用ProGuard代码混淆
启用混淆ProGuard混淆器是Android SDK附带的。Eclipse中取消掉project.properties文件中以proguard.config开头的那一行注释。ProGuard会使用两个配置文件,第一个是tools/proguard目录中proguard-android.txt文件,它是共享通用的android混淆配置文件。第二个是项目配置文件proguard-projec...
2019-05-22 17:44:28
273
原创 常用adb命令
Android debug brige 是一个命令行工具,这个工具是Android SDK其中的一部分,Android开发工具包自带的。adb pull 将手机文件导出到电脑adb pull /data/app/packagename-1.apk D:\把apk导出到电脑上(apk安装在 /data/app目录下,文件名是包名拼接上-1.apk)adb pull /data/...
2019-05-22 17:42:33
165
原创 Android三种动画介绍
帧动画加载一系列的图片资源来创建动画。缺点:加载多图耗费内存。(1)在目录res/drawable/创建动画资源文件。<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item andro...
2019-05-22 17:32:41
321
原创 Android 实现View滑动的几种方式
View本身的scrollTo/scrollBy方法/** * Set the scrolled position of your view. This will cause a call to * {@link #onScrollChanged(int, int, int, int)} and the view will be * invalidated. ...
2019-05-22 17:23:39
376
原创 windowSoftInputMode软件盘输入模式属性值的含义
指定此主活动窗口的默认软键盘输入模式。有两种值类型,窗口和软键盘。窗口调整:值作用adjustPan当显示软键盘时,调整window的空白区域来显示软键盘。软键盘还是有可能遮挡一些有内容区域,这时用户就只有退出软键盘才能看到这些被遮挡区域并进行交互。adjustResize当显示软键盘时,调整window内的控件大小以便显示软键盘。这样的话控件可能会变形。...
2019-05-22 17:21:42
189
原创 Android常用的线程池
线程池的核心实现类是ThreadPoolExecutor,可以通过它来创建一个线程池,其参数最多的构造方法如下:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime...
2019-05-22 15:19:33
123
原创 Android应用出现ANR的原因和解决办法
Android规定如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR,BroadcastReceiver如果十秒也没执行完操作也会出现ANR。怎么定位问题?当一个进程发生了ANR了以后,系统会在/data/anr目录下创建一个文件traces.txt,通过分析这个文件就能定位出ANR的原因。先导出traces文件,其中.表示当前目录:adb pull /data/anr/tra...
2019-05-12 22:58:35
1914
原创 MySQL入门(二)
序列的使用使用AUTO_INCREMENT列。在创建表之后,它会插入几行此表中,但在这里不给出记录ID,因为它由MySQL自动增加。CREATE TABLE insect( id INT UNSIGNED NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(30) NOT NULL, # type of insectdate D...
2019-02-18 10:06:06
184
原创 MySQL入门(一)
MySQL安装只需下载安装包,随地把它解压缩,并运行 mysql.exe. 下载地址:http://dev.mysql.com/downloads/验证MySQL安装使用 mysqladmin 来检查服务器版本:mysqladmin --version可以使用MySQL客户端使用 mysql 命令连接到 MySQL 服务器。此时,不需要给任何密码,因为默认情况下它被设置为空。 所以,...
2019-02-18 10:05:51
142
翻译 Android Room 数据库升级报错 - attempt to re-open an already-closed object
Android Room SQLite Data migration - attempt to re-open an already-closed object查阅文章发现Room 要求:所有整数不为空,向主键添加autoincrement,十进制数为实数,不为空。例如:报错代码database.execSQL("CREATE TABLE Membership (mID INTEGER, ...
2018-12-29 16:02:23
2434
1
原创 Build时出现DexArchiveMergerException: Unable to merge dex
Build APK(s)时报错了,提示:Error:Execution failed for task’:app:transformDexArchiveWithExternalLibsDexMergerForDebug’.&gt; java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexin...
2018-09-07 11:20:07
276
原创 Unable to resolve dependency for ':app@debug/compileClasspath' Android Studio 3.0
更新到Android Studio 3.0,新建一个工程,添加依赖: implementation “com.squareup.retrofit2:retrofit:$retrofit_version”。 编译报错: Unable to resolve dependency for ‘:app@debug/compileClasspath’。 原因:retrofit2库内部依赖okht...
2018-09-06 17:10:53
293
翻译 ViewModel和LiveData:模式+反模式翻译
分配职责 应用架构组件中典型的实体交互 理想情况下,ViewModels 不应该对Android框架类有耦合。这提高了可测试性、泄漏安全性和模块性。一般的经验法则是确保你的ViewModels 中没有导入像 android.( android.arch. 例外)。presenters也一样。 不要让ViewModels(和 Presenters)知道Android框架类的存在 条件语句...
2018-09-05 15:22:47
428
翻译 Android WebView Java和JavaScript的交互(二)
JavaScript有三种消息提示框,分别是:弹出警告框alert,弹出确认框confirm,弹出输入框prompt。对应到Android中的WebChromeClient的三个方法,其中onJsPrompt的参数是带有一个字符串的返回结果JsPromptResult。@Overridepublic boolean onJsPrompt(WebView view, String url,...
2018-08-24 15:04:26
261
翻译 Android WebView Java和JavaScript的交互(一)
Java调用JavaScriptwebView.loadUrl(“javascript:fn()”); 其中fn方法是H5页面中的JavaScript函数。JavaScript调用Java需要三个步骤: 1. 调用与WebView关联的WebSetting实例的setJavaScriptEnabled方法启用功能。 2. 调用WebView的addJavascriptInte...
2018-08-24 12:08:40
208
翻译 【Android开发诀窍】实用工具&活用列表
在正式版本移除日志打印语句我们可能会使用类似以下代码在正式版本移除日志打印语句。if(BuildConfig.DEBUG) { Log.d(LOG_TAG, &amp;quot;Log should be deleted&amp;quot;);}移除日志的最佳方法是使用ProGuard工具。 ProGuard可以移除移除无用代码,或者使用语意模糊的名称来重命名类,变量和方法,以此达到压缩,优化和混淆代码的...
2018-08-21 17:50:51
244
原创 【Android开发诀窍】添加动画效果
使用TextSwitcher和ImageSwitcher实现平滑过渡为了是循环浏览过渡过程的视觉效果更自然,Android提供了TextSwitcher和ImageSwitcher分别替代TextView和ImageView。TextView.setText()内容是立即改变的,TextSwitcher可添加内容切换的动画效果。步骤:findViewById获取TextSwitcher对...
2018-08-20 15:09:43
1512
翻译 【Android开发诀窍】活用布局
合用weightSum属性和layout_weight属性 weightSum定义weight总和。如果没有指定该值,以所有子视图的layout_weight的累加值作为总和。layout_weight定义所占权重。&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro...
2018-08-20 15:07:07
134
Head First Servlets & JSP, Second Edition
2013-04-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人