android
Crystal_xing
温不增华,寒不改叶
展开
-
Unable to load class ‘javax.xml.bind.JAXBException‘.
【代码】Unable to load class 'javax.xml.bind.JAXBException'.原创 2022-10-18 15:48:07 · 1154 阅读 · 0 评论 -
Android: viewHolder 复用错乱导致的显示错误
情况是: recyclerview item里有个自定义View组件GraphView,负责显示速度曲线,假设有10条item,在切换一下底部bottombar再切换回来,发现第一条item的曲线变了,变成了第3个数据源的速度曲线。同样的操作再切一遍,发现曲线又变了,在适配正确的第一条数据源的情况下,却显示成了其他数据的速度曲线。 根本原因是: recyclerView item的布局经过动态 inflate 加载,因为复用的ViewHolder的View组件保留了之前的状态,并且重新调用OnBind原创 2022-07-12 15:25:17 · 1653 阅读 · 0 评论 -
Android: PopWindow背景显示系统提供的阴影
setElevation无效的可能原因是代码中未设置背景,在代码中设一下即可(颜色和布局背景色相同)原创 2022-07-11 10:36:18 · 1971 阅读 · 0 评论 -
Android - PurchaseUpdateListener多次触发的应对策略
在billing4.0库版本上发生PurchaseUpdateListener的回调执行多次的bug,用户只点击了billing内购画面上面的购买按钮一次,但是购买成功的回调进入了多次,网上搜了一下没有特别好用的规避方法和解决方案,故自己写了一个。 核心想法是在极短的时间内过滤掉其他多余的次数,只执行一次进入回调后接下来的触发逻辑(下面的adaptCoupon()就是购买成功后要调用的函数,除了首次意外事件,1.5s内只执行一次),因为如果付费成功,billing回调里的订单一定是唯一的,就像控原创 2022-07-07 16:14:08 · 620 阅读 · 1 评论 -
java - 等待子线程执行结束再继续执行
用CountDownLatch, 在主线程里用 latch.await() 挂起主线程,等待子线程执行完毕再继续执行原创 2022-07-07 15:50:03 · 621 阅读 · 0 评论 -
Android:Room动态拼写原生sql语句
如果不用Room提供的注解方式去查询sql,根据需求要写冗长复杂的查询语句(比如查询的条件数量不是固定的,语句不定长),注解的方式去写实现不了需求,那么就要用Room动态拼写原生sql语句去查询:使用SimpleSQLiteQuery,将原生的sql字符串传进去就行: /** * home_条件検索 * @return 検索結果 */ public Single<List<RidingLogRoomEntity>> searchCon原创 2022-04-18 09:59:41 · 2333 阅读 · 0 评论 -
Android:Environment.getExternalStorageDirectory 废弃
使用Android SDK 版本超过29编译会发现这个方法被废弃了,解决方案是:context.getExternalFilesDir()-----------比如要把图片保存到手机的指定文件夹下后,扫描更新媒体库,在相册中显示,存储路径的旧写法: //app调用系统相机拍照得到的照片存储的路径: /storage/emulated/0/Pictures/demox_camera private val outputPhotoDirectory: String by lazy原创 2022-02-08 10:57:59 · 3959 阅读 · 0 评论 -
Android:关于GooglePlay支付的许可测试
官方的叙述:https://developer.android.com/google/play/billing/test一言以蔽之,开发的时候如果想不绑定银行卡,不产生真实交易过程就测试支付功能,就需要依靠许可测试。在官方叙述的基础上,更为详尽简略的记录一些重要的细节。1. 首先要去控制台用户级别的目录,找【设置】-【许可测试】,将测试购买的谷歌账号添加,确保【许可测试人员】上有要添加的目标账号,这才算设置好了。2. 到应用中找【测试】-【内部测试】,上传一个内部测试的apk发布个新原创 2022-01-07 17:30:03 · 6546 阅读 · 6 评论 -
Android: ViewPager+Fragment嵌套的优化
参考如下博客做一个总结:Android开发-ViewPager嵌套Fragment卡顿解决Viewpager滑动重复加载Fragment延迟加载_Mango先生的博客-CSDN博客_android viewpager滑动卡顿首先要明确的是两个基本概念:getFragmentManager()所得到的是所在fragment 的父容器的管理器。getChildFragmentManager()所得到的是在fragment里面子容器的管理器。getFragmentManager..原创 2021-12-17 11:52:08 · 845 阅读 · 0 评论 -
Android:Android12启动页(Splash)适配
官方文档:启动画面 | Android 开发者 | Android Developers用法,在自定义Splash画面的最初的周期函数(如onCreate)里调用下述方法: private fun extendFlash12Display() { val content: View = findViewById(R.id.root) content.viewTreeObserver.addOnPreDrawListener( ...原创 2021-11-23 09:48:52 · 3269 阅读 · 0 评论 -
Android: 页面元素抓取工具Weditor
在高版本mac系统电脑上,Android SDK提供的页面抓取工具uiautomatorviewer能正常打开但是无法截图,左上角的截屏按钮栏没了,故放弃uiautomatorviewer改用weditor。 mac电脑默认安装的是python2.7,版本不够支持使用weiditor,需要自己手动安装python大于3.6的版本,参考这个博客:mac电脑安装python3.7版本 - 凝心叶子 - 博客园。安装完之后,确认python版本:然后参考这个...原创 2021-11-22 10:01:56 · 3539 阅读 · 0 评论 -
Android:Fragment中物理返回键监听
ar dispatcher: OnBackPressedDispatcher? = nullvar callback: OnBackPressedCallback? = nulldispatcher = requireActivity().onBackPressedDispatchercallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { if (menuI.原创 2021-11-12 10:09:53 · 2740 阅读 · 0 评论 -
Firebase- Performance Monitoring
官方文档:https://firebase.google.com/docs/perf-mon/get-started-android#java性能统计的集成很简单,按照官网来就行,简单来说只需要在两个gradle文件配置即可:然后就能在控制台里看到性能统计的值了:...原创 2021-09-28 14:27:11 · 447 阅读 · 0 评论 -
Android: SERVER_ERROR: [code] 1349195 [message]: 该密钥散列不匹配任何已存储的密钥散列
集成Firebase Facebook 认证登入的时候,碰到这个问题。重点到Facebook控制台上去看密钥序列是否已经正确填写,没填或者填错了就会这样。进入这个网址:https://developers.facebook.com/docs/facebook-login/android,找到第6步在终端Terminal照着命令生成。在第1步选中要设置的项目,将上面的字符串结果设置好,保存。...原创 2021-08-25 14:05:34 · 1558 阅读 · 0 评论 -
Android -Webview内存泄漏
解决方案:onDestory中加入如下代码,wvTerm是webview的id: if (dataBinding?.wvTerm != null) { val parent = dataBinding?.wvTerm?.parent (parent as? ViewGroup)?.removeView(dataBinding?.wvTerm) dataBinding?.wvTerm?.apply {原创 2021-07-27 11:31:44 · 380 阅读 · 0 评论 -
Google Play 支付集成
官方文档:https://developer.android.com/google/play/billing代码按照官网集成就可以,很清楚,下面主要记录控制台的配置。1.先商品 -> 应用内商品,先上传APK后再添加商品:2. 创建商品:3. 启用,看到【有效】的字眼说明设置商品成功4. Google Play控制台app通过审核后, 集成代码通过querySkuDetailsAsync()方法,测试发现成功取到商品的信息:...原创 2021-07-01 15:17:21 · 694 阅读 · 0 评论 -
Android: Retrofit - End of input at line 1 column 1 path
使用Retrofit ,当服务器返回的response是空的,什么都没返,ResponseModel数据格式与后台服务器返回的数据格式不匹配,就会报这个错误。在这找到了解决方案:https://stackoverflow.com/questions/35744795/retrofit2-error-java-io-eofexception-end-of-input-at-line-1-column-1代码中改为: @POST(ApiConfig.PATH_POST_DEV...原创 2021-06-24 14:03:41 · 1799 阅读 · 0 评论 -
Android FCM:测试工具(PostMan)
用PostMan工具发送消息进行测试的步骤:1: Post:https://fcm.googleapis.com/fcm/send2: header加上两个,其中第二个Authorization的形式是key = FCM项目控制台中的服务器密钥:3: 测试Json , to 填写的是FCM Token:{ "to":"fcsWFpbtTaKOQW7qUjdIuU:APA91bHO6_y6NiZfNL8-bex8ItvFbHd3zrbsoUI...原创 2021-05-24 16:23:11 · 2026 阅读 · 2 评论 -
Android: Amazon SNS Notification 通知 使用记录
官方文档:https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sns-mobile-application-as-subscriber.html一份介绍术语的教程:https://www.unitrust.co.jp/6182Amazon Simple Notification Service (Amazon SNS) 是一项托管服务,可从发布者向订阅者 (也称为创建者和使用者) 提供消息传送。谷歌翻译教程中的图片流程: 启动应用程序时允许推原创 2021-05-21 15:27:21 · 772 阅读 · 0 评论 -
Android: uri转File路径(filePath)
fun getFilePathFromUri(uri: Uri, context: Context): String? { val returnCursor = context.contentResolver.query(uri, null, null, null, null) /* * Get the column indexes of the data in the Cursor, * * move to the first row i...原创 2021-04-26 16:23:41 · 1026 阅读 · 0 评论 -
Android: ScrollView嵌套ExpandableListView,ScrollView无法滚动的冲突
解决方案就是写个子类,重写onMeasure方法即可:自定义ExpandableListView的子类:package jp.oikura.app.widgetimport android.content.Contextimport android.util.AttributeSetimport android.widget.ExpandableListViewinternal class CustomNestedExpandableListView : ExpandableL..原创 2021-04-12 11:49:16 · 624 阅读 · 0 评论 -
Android:WebView的loadData( )加载html空白
情景是:SdkVersion是28的时候WebView一切正常显示,升级SdkVersion到30的时候,WebVIew用loadData加载html就显示一片了。这时候在如果在onPageFinished里看值,onPageFinished的回调中看url的值:data:text/html; charset=utf-8,<html>%0A<head>%0A<meta charset="utf-8">%0A<meta name="format-detecti原创 2021-03-19 11:30:38 · 1227 阅读 · 0 评论 -
Android: onActivityResult resultCode为0,Intent为null
主流的网上解决方案都是跟Activity的启动模式不是singleTop和Standard有关,但是在Standard模式下还是碰到了这个问题,经过调试发现问题出在: @Override public void onBackPressed() { setCloseResult(); finish(); super.onBackPressed(); } private void setCloseResult(){原创 2021-03-11 17:23:21 · 736 阅读 · 0 评论 -
No cached version of com.facebook.android:facebook-android-sdk:8.1.0 available for offline mode
解决方案:https://www.cnblogs.com/flay/p/12641381.html图片是灵魂:转载 2021-03-09 15:40:39 · 545 阅读 · 0 评论 -
Android:E/IdpSignInActivity: Web sign-in failed, finishing
Twitter登陆碰到这个错误,光从错误日志只有一句,看不出什么:调到Verbose,这个错就好定位了,是sha1指纹不匹配:原创 2021-03-05 17:07:27 · 261 阅读 · 0 评论 -
Firebase - Crashlytics 集成心得
官方文档:https://firebase.google.com/docs/crashlytics/get-started?authuser=2&platform=Android此篇博客作成的时候,官方文档是有bug的,勾选了Android版本的教程,但是显示的依然是IOS的。梳理了一下实际需要做的,流程如下:网页控制上启用功能:开启完之后发现是这个样子的,一直在转圈:接着是代码部分,代码部分集成很简单,只需要在2个build.gradle中配置就可以了:Pr..原创 2021-03-05 16:18:26 · 1173 阅读 · 0 评论 -
Android 讯飞语音识别 —— (WebAPI开启动态修正识别)
官方文档:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E6%B5%81%E7%A8%8B 讯飞WebAPI语音听写流式接口,用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。开启动态修正的好处是能提高识别效果的准确度。 官方网站控制台在线测试的URL:https://www.xfyun.cn/servic...原创 2021-03-04 11:15:00 · 1358 阅读 · 0 评论 -
Firebase Auth 获取token secret
官方文档:https://firebase.google.com/docs/auth/android/twitter-login官方文档这段描述过于模糊,直接getAccessToken(), getSecret(),是点(.)不出来的,需要把AuthResult的AuthCredential对象强转成OAuthCredential, 然后再取得: /** * Firebase Twiter 认证 * * @param context ...原创 2021-02-18 16:51:27 · 1076 阅读 · 0 评论 -
[GetAuthDomainTask] Error getting project config. Failed with { XXX “message“: “INVALID_CERT_HASH
完整日志如下:2021-02-10 14:39:25.954 28918-30756/jp.or.eiken.studygear E/FirebaseAuth: [GetAuthDomainTask] Error getting project config. Failed with { "error": { "code": 400, "message": "INVALID_CERT_HASH", "errors": [原创 2021-02-10 16:12:51 · 545 阅读 · 0 评论 -
Firebase - Apple Auth 认证登陆心得
官方文档:https://firebase.google.com/docs/auth/android/apple?authuser=2。官方文档的流程已经很清晰的描述了过程,挑一些需要注意的地方补充记录下来:1.苹果ID需要启用了双重身份验证 (2FA) 。双重验证:您的密码和六位数的验证码,这些信息会自动显示在您信任的设备上或发送到您的电话号码。通过输入代码,您正在验证您对新设备的信任参考: https://support.apple.com/en-us/HT204915...原创 2021-02-09 15:11:35 · 860 阅读 · 1 评论 -
Firebase - Twitter三方登陆认证集成心得
官方文档:https://firebase.google.cn/docs/auth/android/twitter-login?hl=zh-cn1.首先根据文档,需要在Firebase控制台创建项目,按照提示填写生成后将google-services文件引入项目,确保FIrebase控制台上设置好sha1证书签名:(获取sha1的命令:keytool -list -v -keystore ~/.android/debug.keystore,密码是android)2. 打开Twitter开发.原创 2021-02-01 14:57:42 · 1293 阅读 · 1 评论 -
Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder;
使用Firebase Auth 认证的时候出现如下错误:1612145598.686 21721-21721/com.change.demox E/om.change.demo: Invalid ID 0x00000000.1612145621.043 21721-21721/com.change.demox E/AndroidRuntime: FATAL EXCEPTION: main Process: com.change.demox, PID: 21721 java.lang.原创 2021-02-01 10:25:13 · 606 阅读 · 0 评论 -
Mac 手动安装 Gradle
https://www.jianshu.com/p/c7925c564a25转载 2021-01-26 15:54:28 · 238 阅读 · 0 评论 -
Android:emulator: ERROR: Can‘t find ‘Linux version ‘ string in kernel image file: /Users/admin/Libr
12:24 PM Emulator: emulator: ERROR: Can't find 'Linux version ' string in kernel image file: /Users/admin/Library/Android/sdk/system-images/android-30/google_apis/x86//kernel-ranchu-6412:24 PM Emulator: Process finished with exit code 1步骤:Tools > S.原创 2021-01-18 12:52:18 · 861 阅读 · 0 评论 -
Android: Gradle project sync failed. Please fix your project and try again
出现这种情况,重启项目让Gradle重新编译,多半能解决原创 2021-01-12 16:58:58 · 881 阅读 · 0 评论 -
java.net.UnknownServiceException: CLEARTEXT communication to XX not permitted by network security
https://blog.csdn.net/qq_37684824/article/details/89681392原因;翻译过来就是安卓9加强了保密性,导致无法进行非加密的http网络请求。转载 2020-10-07 13:14:22 · 272 阅读 · 0 评论 -
Android:bottomSheet效果的下拉拖拽功能总结
效果如动图所示,Android中要对布局中的控件进行自由拖动,一般有两种实现方法:方法1:重写父类点击事件的方法, 对触摸事件进行处理。方法2: 利用ViewDragHelper接管触摸操作来处理触摸事件。 gif图所用的便是方法2。ViewDragHelper提供的callback(ViewDragHelper.Callback)针对 ViewGroup 中的拖拽和重新定位 views 操作时提供了一系列非常有用的方法。下面贴出Demo的核心代码:布局:...原创 2020-10-05 11:29:41 · 960 阅读 · 0 评论 -
Android:This usually happens when two views of different type have the same id in the same hierarchy
这个崩溃于旋转屏幕的时候,从纵向布局切换到横向布局的时候发生:java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.os.Bundle instead. This usually happens when two views of different type have the same id in the same hierarchy. This .原创 2020-10-02 14:13:08 · 1352 阅读 · 0 评论 -
Android: ViewModel> has no zero argument constructor
viewModel = ViewModelProvider( this, ViewModelProvider.AndroidViewModelFactory.getInstance(application) ).get(PDFBookDocumentViewModel::class.java)使用上述方法加载viewModel报上述错误。如果您想为ViewModel类提供一个非零参数的构造函数,则可能必须创...原创 2020-09-29 15:04:21 · 4258 阅读 · 0 评论 -
Android:自定义layout 无法显示
布局代码引入自定义layout如下所示: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/textview_description" android:orientation="vertical"> <com.change.de原创 2020-09-28 10:51:47 · 1571 阅读 · 0 评论