9 shineflowers

尚未进行身份认证

每个人都是独一无二的……

等级
TA的排名 2k+

Google Room框架简单使用

Google关于数据库,从最初的SQlite, 到后来的GreeDAO,用起来都不错。最最近项目中想尝试下Google的Room数据库,还可以跟RxJava结合,先把用法记录如下:参考文档https://developer.android.google.cn/jetpack/androidx/releases/room1. 项目中引入Room2. app build.gradle配置AP...

2019-09-18 17:18:29

Android 9.0 API 28 TabLayout

原来使用的修改TabLayout下划线的宽度的通用方法不好使了。api 28之前的修改下划线的代码如下:public void setIndicatorWidth(@NonNull final TabLayout tabLayout, final int margin) { tabLayout.post(new Runnable() { @Overrid...

2019-07-18 10:28:36

Android ERR_CLEARTEXT_NOT_PERMITTED

Android 9.0打开html网页,出现这个错误然后去google文档中查找才发现Android9.0对未加密的流量不在信任,添加了新的限制。解决方案:

2019-07-05 11:25:52

判断一个字符串是回文字符串

回文的定义:“回文数”就是正读倒读都一样的整数。判断一个字符串是否是回文字符串,算法如下: public static boolean isHuiWen(String text) { int length = text.length(); for (int i = 0; i < length / 2; i++) { if (tex...

2019-04-16 13:43:50

猴子偷桃问题

题目一个猴子来到山里的一棵桃树下,发现有一堆桃子。第一天它吃掉一个,然后拿走一半,回到家里,把消息告诉第二个猴子。第二天第二个猴子也来了,又吃掉一个,然后拿走了一半,回到家,告诉第三个猴子。第三个猴子也是吃掉一个,然后拿走了一半。以此类推,第10天,第10个猴子来到时,发现还剩下1个桃子。求第一天总共有多少个桃子?分析从最后一天往前推算,n1,n2,n3,n4,n5......n10表示第n...

2019-04-04 09:51:03

用两个栈实现一个队列

#思路入栈元素直接压入stack1出栈元素先查看stack2是否为空,非空则弹出;空则将stack1中元素取出,置于stack2中。代码如下:public class StackQueue { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = ne...

2019-04-02 16:31:19

Java实现构建者(Builder)模式

Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。我们有时候会写这样的实现类:Student();Student(String name);Student(String name,int age);St...

2019-03-27 15:00:58

Detected problems with API compatibility(visit g.co/dev/appcompat for more info

项目中,用户在Android P 手机上报过来一个问题,如下:调研了一下,是 Android P 后谷歌限制了开发者调用非官方公开API 方法或接口,也就是说,你用反射直接调用源码就会有这样的提示弹窗出现,非 SDK 接口指的是 Android 系统内部使用、并未提供在 SDK 中的接口,开发者可能通过 Java 反射、JNI 等技术来调用这些接口。但是,这么做是很危险的:非 SDK 接口没有...

2018-12-17 10:23:08

Execution failed for task ':app:mergeDebugResources'.

今天在项目中碰到下面的编译错误,错误信息如下:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugResources'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter....

2018-07-26 09:33:40

Android性能优化

随着应用增多,功能越来越复杂,布局也越来越丰富,而这些也成为阻碍一个应用流畅运行的阻碍。因此,对复杂的应用进行性能优化是创建高质量的应用程序的基础。Android UI 渲染机制人眼感觉的流畅画面,需要画面的帧数达到40帧每秒到60帧每秒,相信玩过PC游戏的朋友应该对帧数的概念非常清楚,最佳的fps大概在60fps左右,这也是评价一个显卡性能高低的标准之一。在Android中,系统通过VS...

2018-05-22 16:03:13

滴滴插件化工具VirtualAPK源码解析之Activity

上篇文章已经介绍了VirtualAPK的配置和使用,请参考https://blog.csdn.net/shineflowers/article/details/80167302 今天看下从源码角度分析下VirtualAPK是怎么启动插件APK的吧!从上篇文章我们已经知道,启动插件APK的核心代码如下:// 加载Plugin.apk插件PluginManager pluginManage...

2018-05-04 15:43:33

滴滴插件化工具VirtualAPK的使用

简介Android 插件化技术是比较热门领域,VirtualAPK 是滴滴2017年6月3号开源,框架功能完备,支持 Android 四大组件,良好的兼容性,且入侵性较低,作为加载耦合插件方案是较好选择。环境准备Gradle版本号为2.14.1,可以在gradle/wrapper/gradle-wrapper.properties中更改版本号: distributionUrl=h...

2018-05-02 15:35:04

ViewPager与Button、TextView左右滑动冲突的问题

最近在项目中碰到一个非常奇葩的问题,我的最外层是一个ViewPager,ViewPager中包含一个Fragment的集合,可以左右滑动,Fragment中的布局文件部分如下:<Button android:layout_width="match_parent" android:layout_height="match_parent" android:layo...

2018-03-08 09:51:41

Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]

平台版本是Android 7.0,在adb install *.apk 会提示下面的错误: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]方法1: 修改AndroidManifest.xml 中android:testOnly=”true” 改成 android:testOnly=”false”,或者直接去掉。方法2: ad...

2018-02-27 09:43:25

基于SwipeRefreshLayout的上拉加载控件

距离上一篇博客,居然已经过了大半年的时间,时间过得真快啊!CSDN最近大改版,各种用户体验也是被无数人吐槽,让人提不起任何写博客的兴趣,不过,该写的博客还是必须得写,话不多话,直接进入正题。 现在项目中用列表来展示数据比比皆是,ListView和RecyclerView大家也是耳熟能详。实际项目中,后台肯定的接口肯定都是分页的,那么,分页加载也是自然而然的事,下面基于Google原生的下拉刷新控

2018-01-11 16:09:53

Kotlin Reference (十四) Generics

most from reference泛型和Java一样,Kotlin中的类可能有类型参数:class Box<T>(t: T) { var value = t}一般来说,要创建一个类的实例,我们需要提供类型参数:var box: Box<Int> = Box<Int>(1)但是,如果可以推断参数,例如从构造函数或其他方式,可以省略一个参数:val box = Box(1) // 1 ha

2017-08-18 17:21:39

Kotlin Reference (十三) Data Class and Sealed Classes

数据类我们经常创建一个类,只能持有数据。在这样一个类中,一些标准功能通常是从数据中机械推导出来的。在Kotlin中,这被称为数据类,标记为data:data class User(val name: String, val age: Int)编译器自动从主构造函数中声明的所有属性生成以下成员:equals() / hashCode()toString() 的形式 “User(name=Jacki

2017-08-11 11:34:01

Kotlin Reference (十二) Extensions

most from referenceKotlin与C#和Gosu类似,提供了扩展一个新功能的类,而不必继承类或使用任何类型的设计模式,如Decorator(装饰者模式)。这是通过称为扩展的特殊声明完成的。Kotlin支持扩展功能和扩展属性。扩展功能要声明一个扩展函数,我们需要一个接收器类型(即被扩展的类型)作为其名称的前缀。以下是为MutableList扩展的swap功能:fun MutableL

2017-08-08 09:53:41

Kotlin Reference (十一) Visibility Modifiers

most from reference类,对象,接口,构造函数,函数,属性及setters具有可见性修饰符(getter总是具有和属性一样的可见性)。在kotlin中油4个可视化修饰符:private,protected,internal,public。如果没有显式修饰符,则使用默认可见性public。包函数,属性和类,对象和接口可以在顶级上声明,即直接在包中:// file name: examp

2017-08-07 14:39:27

Kotlin Reference (十) Interfaces

most from reference接口Kotlin中的接口非常类似于Java8,它们可以包含抽象方法的声明以及方法实现。与抽象类不同的是接口不能存储状态。它们可以具有属性,但这些需要是抽象的或提供访问器。 使用interface关键字定义接口interface MyInterface { fun bar() fun foo() { // optional body

2017-08-07 13:35:41

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。