Google Pay 踩坑之路
首次接入 Google Pay 走了不少弯路,遇到很多奇奇怪怪的问题,在此将接入 Google Pay 的历程做个总结与回顾。下文主要围绕两个方面,接入流程和遇到的问题。接入流程主要参考 Google 官方文档,结合服务端校验订单。遇到的问题主要包含商品获取异常、无法完成购买、消费状态异常等等。
首次接入 Google Pay 走了不少弯路,遇到很多奇奇怪怪的问题,在此将接入 Google Pay 的历程做个总结与回顾。下文主要围绕两个方面,接入流程和遇到的问题。接入流程主要参考 Google 官方文档,结合服务端校验订单。遇到的问题主要包含商品获取异常、无法完成购买、消费状态异常等等。
MotionLayout 是 ConstraintLayout 的子类,可以用于布局的状态转换添加动画效果。本文介绍了如何使用 MotionLayout 实现展开折叠动画。
从一个上线前的流式布局 FlowLayout 小 bug 入手回顾一下 View 的 measure。
很久以前的某一天,忽然收到反馈,搜索结果的列表中有些项目不可点击,并且这些项目是没有规律的。看到这个反馈的第一反应是这不可能,每个 Item 的点击事件都是统一处理的,不可能出现某些能点某些不能点的问题。抱着怀疑的态度,准备去 Review 代码,一步一步排查,尝试定位问题所在。
又到了一年一度回顾的季节了,已经隔了好几年不写年记了,今年回归啦。翻看这一年的社交网络的记录,越发少的在公开场合发表任何心得,越来越难以回忆起这一年的点滴瞬间,生活越显寡淡。
最近在 Vue、HTML、CSS 几乎小白的情况下,接到了一个 Weex 页面需求,于是乎开始了 Weex 的学习,遇到了一些坑,在这里做一些总结。Weex 是阿里开源的一个「使用 Web 开发体验来开发高性能原生应用的框架」,号称「Write Once, Run Everywhere」。
Kotlin 是 JetBrains 公司(著名的 IntelliJ IDEA 正是由这家公司开发的,Android Studio 也是基于 IDEA 的)在 2011 年推出的在 JVM 上运行的静态类型编程语言,2016 年发布了第一个稳定版本, 2017 年 Google I/O 上被 Google 定为 ...
不知不觉中,已经走到了 2015 的尾巴。在各个隐藏角落,找寻 2015 的痕迹,将一点一滴的回忆拼凑起来,组成了这个篇章。
最近有个需求是夜间模式,在实现之前肯定得看看官方文档有没有相关的 tips,结果真的有。Providing Resources 这一节提到了夜间模式可以用 UiModeManager 实现,这是个令人高兴的事情。那么这就是方法一了。提到夜间模式,想起最近很火的知乎夜间模式,在知乎上搜索一番,看见了几个问题,知乎安...
很久以前就想写这篇文章了,Android Lollipop 已经发布这么久了,迟迟没有整理,一直拖到了现在。肯定得说的是 Material Design。所谓 Material Design,直接引用官方的文档,还是不翻译了。
年年岁岁,岁岁年年,又到了省视自己的时刻。每每觉得不舍,时光匆匆流走,留下一丝丝念想。2014,最重要的分水岭,走向了另一个阶段。2014年的尾巴,如期而至。按照惯例,是时候回顾我这平凡的一年了,酸甜苦辣,种种滋味。一笔一划都那么艰难,写下多少又删去更多。
在Android中实现数据的加载,总的来说有两种方式。一种是开发者利用AsyncTask(当然,也可使用Thread + Handler的方式,仅以AsyncTask作代表)在新的线程中开启数据库,读取数据,在数据读取完毕后刷新页面,展示数据。这种方式简单易懂,实现起来容易,但有点繁琐,需要开发者手动管理SQLi...
从开始写Android开始到现在,总觉得SQLite就那么回事嘛,不就是各种query、insert之类的操作,写好SQL语句就可以了。直到遇到现在做的这个项目,才发现关于SQLite,我没踩过的坑还那么多。本文正是来源与此,将一一阐述这些日子对于SQLite的重新认识。
在[上一篇博客](http://echo.vars.me/android/2014/08/14/search/)的基础之上,使用Search Dialog来记录搜索的历史。记录用户的搜索记录可以提高用户搜索的效率,例如在用户搜索过`test`后,用户输入了`t`,将用户搜索过的以`t`开头的词`test`显示出来。
Search Dialog是一个android系统能够控制的组件,只能放置在Activity的顶部。Search Widget是SearchView的一个实例,可放置在Activity的任意位置。仅在Android 3.0以后才可使用。当用户执行一个搜索时,系统将查询提交给开发者指定的查询执行的Activity,...
本文主要阐述如何使用Java来调用C的流程。
JNI是Java Native Interface,用来沟通Java代码和C/C++代码的桥梁。通过JNI,Java代码可以调用C/C++代码,且C/C++代码也可以回调Java代码。为什么使用JNI?一般是以下几个原因
本文主要描述了使用C来回调Java的流程。
NDK基础
2013,意味着一切大不同。2013,意味着变轨。2013,终于到了说再见的时刻。回望过去的三年,一点一滴的变化,在经意与不经意间,悄然到来。
关于Jena的简介在很多博客中都能看到,例如[对Jena的简单理解和一个例子](http://imarine.blog.163.com/blog/static/51380183200812774739130/),[使用Jena将本体存入MySQL](http://imarine.blog.163.com/blog...
对于位运算,大家都很熟悉,基本的位操作有与、或、非、异或等等。在面试中经常会出现位运算相关的题,所以我就做了简单的整理,参考了很多写的很好的博客及书籍。现在简单说一下,移位运算。
大家都知道的是,基于比较的排序算法的时间复杂度的下界是 O(n log(n))。这一结论是可以证明的,所以在基于比较的算法中是找不到时间复杂度为 O(n)的算法的。这时候,非基于比较的算法,如计数排序、基数排序和桶排序,是可以突破这个下界的。但是,非基于比较的排序的使用限制却是较多的,如计数排序仅能对较小整数进行...
链表是一种很常见的数据结构,在每个节点都保存了指向下一个节点的指针。与顺序表相比,链表插入元素的复杂度是O(1),查找一个节点或者访问特定节点编号的元素的复杂度是O(n);顺序表插入元素的复杂度是O(n),而查找的复杂度是O(1)。使用链表可以不必事先知道数据的大小,但是增加了指针域,加大了内存的开销。链表有三种...
二叉树的每个节点至多只有两棵子树,二叉树的子树有左右之分,不可颠倒。二叉树的第i层至多有2^(i-1)个节点;深度为k的二叉树的节点至多有2^k - 1个节点;对任一个二叉树,其叶子节点的个数为n,度为2的节点个数为m,n = m + 1 。(摘自wiki)
进程是操作系统资源分配的最小单元。操作系统分配给进程的内存空间中包含五种段:数据段、代码段、BSS、堆、栈。
进程是操作系统资源分配的基本单位。进程中代码执行的一个序列。线程是操作系统可以进行运算调度的基本单位。
每个排序的写法格式基本按照先介绍基本思想,再描述具体过程,最后是具体代码。关于复杂度等问题后续更新。如有写的不严谨的地方,欢迎指出,相互交流。
嵌套Tab在Android应用中用途广泛,之前做过的一些东西都是运用了TabActivity。但是由于在Android Developers中说到了“TabActivity was deprecated in API level 13." ,并且建议大家使用Fragment。
不知不觉已经是最后一次的实验了。这一次实验的内容是:在Ubuntu下编写多线程的应用程序memtest.c,解决一个可并行运算的问题。在Linux 0.11的进程管理基础上,按照POSIX Threads标准实现内核级线程,使其能支持memtest.c的运行
就这样,漫无目的,晃晃悠悠,走到了2012年的尾巴。文字记录下的点滴,珍藏的瞬间,跃然纸上,跃然心头。写文字的好处,即使记忆被时光冲刷的看不清了痕迹,我还是可以找到点点印迹。
第七次实验的内容是在Linux 0.11上实现procfs(proc文件系统)内的psinfo结点。当读取此结点的内容时,可得到系统当前所有进程的状态信息。例如,用cat命令显示/proc/psinfo的内容
第六次实验可以算是很简单的一次了,只要知道了0.11如何响应你的键盘事件,一切问题都迎刃而解了。实现这个实验的方法有很多,我的也是仅供参考,其他方法可能还有些是涉及到修改汇编代码的。
本次已经是OS的第五次实验了,这次要做的内容有:用Bochs调试工具跟踪Linux 0.11的地址翻译(地址映射)过程,了解IA-32和Linux 0.11的内容管理机制。
说起这次的语义分析,不得不说的是我的重大的改变。上一次的语法分析是利用了预测分析法来实现的,经过多方考证,发现用预测分析法的语法分析器基础来实现语义分析的困难重重,例如在语法指导翻译的时候那个栈的变化和各种属性的传递就已经让我头晕脑胀了。无奈之下,只好重写语法分析,用了递归下降来实现语法分析进而实现我的语义分析。
第四次实验是一道坎啊,话说当年差点没做出来,各种纠结的问题都出现了。这一次的实验涉及到前几次实验的小综合,所以要求有点高。建议一定要认真仔细多阅读几遍指导书。
在做这次实验的时候,一定要耐心一点。我当时做的时候就因为在修改的过程中出现了一点小小的失误,导致了整个实验重新来过一遍。为了避免这样的情况发生,一定要记住修改的时候,要注意修改的内容无误。
词法分析器的功能是输入源程序,输出单词符号。当初定义Token(单词种别,属性值)序列的时候,是将单词种别用数字来表示,后来再做语法分析的时候,发现用数字时不太合理的,所以又对单词的种别码进行了一番修改。
操作系统的第二个实验是在0.11下添加两个系统调用,iam 和 whoami.
在上一次词法分析的基础之上,我完成了我的C语言的语法分析器。这次选择的是用Java来实现,采用了自顶向下的分析方法,其思想是根据输入token串的最左推导,试图根据现在的输入字符来判断用哪个产生式来进行推导。