项目开发,引进了一个新的三方库,导致之前能运行的代码出现问题,错误堆栈:
1 | FATAL EXCEPTION: main |
项目开发,引进了一个新的三方库,导致之前能运行的代码出现问题,错误堆栈:
1 | FATAL EXCEPTION: main |
最近随着 Google 的大力推荐,越来越多开发者开始使用 Kotlin 了。其实我对 Kotlin 的并没有很特别的感觉,它就类似于 Swift 相比于 OC,大量的语法糖着实能使写代码的效率变高,但是是否能左右 Android 开发的现状还未可知。我接触 Kotlin 的主要原因是:业务代码太无聊啦。相信很多开发者都跟我有同样的感触,在一个公司待久了,技术框架摸透之后,后面的开发就基本是纯业务开发了,写界面,写业务代码,对于技术提升没有什么实质的帮助,就是真正的码农。为了改变这一现状,我不断在新需求中使用一些新的技术,比如 RxJava、Retrofit 等等,说是新技术其实也不新了,都出来都很久了,只是自己在项目中没有用到,接触得不多。在新需求中引入这些技术,可以边开发边学习,解决写业务代码的无聊,还能拓宽视野,学习新知识。虽然不一定会成为主流,但学习一下总是没问题的,因此开始接触 Kotlin。这篇文章主要先讲讲 Kotlin 的配置。
最新的 Android Studio 已默认装了 Kotlin 插件了,在旧版本可自己手动安装 Kotlin 插件。
more >>习惯了用 LinearLayout、RelativeLayout 等布局,但是在某些界面的优化上这些布局很难做到。说下我项目中的实际例子:
一件商品有品名、数量、单价、金额等几条属性,要显示在一行。 注意,图中金额属性没有显示全,但这不是本文要写的内容。当文本过长显示不下,这是个历史难题。 本文要讲述的是如何利用约束布局来优化界面的显示。
看到图中,我们通长使用 LinearLayout 的 weight 属性,给每一列设置一个 weight,相信大多数人都是这么做的,就像这样:
之前的一篇文章Retrofit初识尝试用了下 Retrofit。说来惭愧,到现在才写这篇文章。由于项目中没有使用的缘故,一直停留在了解的程度。最近自己学习做了个Gank客户端,一点点学习当前主流的技术,今天研究了下 Retrofit 的源码,颇有感触,便记录下来。
关于正常的使用,参考之前的那篇文章。这里再写一下结合 RxJava 的使用。
1 | public interface GankService { |
1 | Retrofit retrofit = new Retrofit.Builder() |
1 | GankRequestManager.getInstance().getCategory(type, PAGE_SIZE, mPage) |
之前写过一篇Gradle多版本管理,主要是通过productFlavors来控制产品版本。这篇文章将结合buildTypes来说一下多版本管理。
在正常开发中,我们一般会有至少 2 个环境:Debug、Release,即测试环境和生产环境。显然这 2 个环境要用 2 套不同的数据,那么在我们的 App 里必然就需要有个地方来控制这个环境。当然,我们可以在 Debug 的时候用 Debug 环境,然后当要发版时手动改成 Release 环境,但是这很麻烦,很难排除忘记修改的情况,那么等待重新编译将是个很漫长的过程。其实Gradle可以很好的解决这个问题:利用 buildTypes 来控制编译类型。
buildTypes 默认会有 debug、release 2 个类型,当然我们还可以添加自己的。比如有个beta环境,用于外网测试。当对接一些三方平台的接口时,有的只能用外网,那么只能整一套外网的测试环境了,比如美团外卖。好,现在假设我们有 debug、beta、release 3 个 buildTypes,然后 pad、phone、custom 3个 productFlavors,接下来就是针对这些环境做配置了:
今天发现了一个在对象序列化时的错误。
1 | E/Parcel: Class not found when unmarshalling: com.lijia.study.InventoryDetail |
最近在做收银机相关的开发,涉及到双屏异显的一些东西,之前也没有接触过,在查阅一番资料之后,把功能走通了,这里小记一下。
Presentation 是一种特殊的对话框,主要用于在另外一块屏幕上显示内容。默认为克隆模式,即副屏显示和正屏一样的内容。当需要显示不同内容时,需要自定义 Presentation,并为其指定一个 Display。这里随便定义一个 Presentation:
1 | public class MyPresentation extends Presentation { |
前段时间终于下定决心自己实践 RxJava,Retrofit 等当前十分流行的库,利用 Gank.io 的公共 API,做一个自己的 Gank 客户端。项目地址: Gank。只要有闲暇时间便会写写代码,慢慢完善。期间有一些小的知识点,但是却很实用,这里便列一下。关于 RxJava,Retrofit 目前学习还不是很深入,这里便不展开了。
现在与服务端通信通常都是Json,但是服务器返回的Json串的key是服务端自己的命名规则(可能是中文key,或者大写开头),我们直接通过Gson解析就必须一一对应,但是这样的命名在Java里很不友好。
那么就可以通过@SerializedName注解给Bean类进行“重命名”,这样在解析的时候便可以直接利用我们自己的命名规则命名变量了。
举个栗子:http://gank.io/api/day/2017/08/03
返回的数据包含Android,福利等不符合Java规范的key,那么就可以这样:
1 | public class DataResults { |
如此便可以直接通过Gson解析,并且变量名是以我们自己的命名规则进行命令的了。
more >>tag:
缺失模块。
1、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
2、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: true
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true