View 构造方法中第三个参数 defStyleAttr

今天使用一个自定义控件继承自 AppCompatButton, 字体不是居中的, 最后排查发现是构造方法的问题; 对比 AppCompatButton 的源码发现是 defStyleAttr 参数的问题 public class TButton extends android.support.v7.widget.AppCompatButton { public TButton(Context context) { this(context, null); } public TButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TButton(Context context, AttributeSet attrs, in ...

java 基础回顾 – Object

Object 是 java 中的基类 里面的部分方法经常需要被重写, 所以必须对 Object 内的方法有所了解. 下面是 Object 的部分源码内容和注释 package java.lang; public class Object { public Object() { } /** * 拷贝对象, 直接调用是浅拷贝, 重写后通过对非基础类型的属性调用循环调用 clone() 方法实现深拷贝 */ protected java.lang.Object clone() throws CloneNotSupportedException { } /** ...

AIDL 回调中的 IllegalStateException

beginBroadcast java.lang.IllegalStateException 已知在 aidl 中回调注册的 callback 对象时, 需要使用 beginBroadcast() 和 finishBroadcast(), 且一个 begin 之后对应一个 finish; 下面是官方建议的回调的写法; int i = callbacks.beginBroadcast(); while (i > 0) { i--; try { callbacks.getBroadcastItem(i).somethingHappened(); } catch (RemoteException e) { // The RemoteCallbackList will take c ...

在 Data Binding 使用数组资源和定义多个属性

同时定义多个属性 如果给一个 View 添加多个属性, 并且这几个属性是相互影响的, 可以像下面这样定义; @BindingAdapter({"background", "skin"}) public static void setViewBgStyle(Button view, String[] arrayId, int index) { } 1234     @BindingAdapter({"background", "skin"})    public static void setViewBgStyle(Button view, String[] arrayId, int index) {    ...

ContentProvider

时间过得真快, 上一篇关于 ContentProvider 的笔记还是 2015 年的时候, 之后就没有用过 ContentProvider 了, 有些东西都忘了, 而且关于自定义 ContentProvider 和 greendao 的内容比较少, 这里再重新整理一遍; 这里使用 greendao 框架存储数据, 不同点就是 SQLiteDatabase 对象是通过 greendao 提供的 getWritableSQLiteDatabase 方法来获取到的; 正文 继承 ContentProvider, 来实现跨进程的数据库访问; 继承的子类需要在 AndroidManifest.xml 中进行配置; <provider android:exported="tr ...

andrid 8.1 前台服务

android 8.1 在设置前台服务时, 发送通知, 需要指定一个 channelId; private void startForeground() { String channelId =""; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { channelId=createNotificationChannel(); } Intent intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); ...

恶意号码识别

自己用的原生系统的 android 手机没有恶意号码识别的功能,应用市场上的号码识别软件还需要通讯录这类的权限,用起来自己也不放心,于是就打算自己写一个应用来做这事; 搜索号码识别接口的时候, 在网上找到了这篇文章,但是原博主的文章里贴出的代码已经无法使用,就自己改了一下代码; 识别号码的原理 使用"360搜索"搜索号码 -> 分析返回的网页数据 -> 从网页数据中提取数据返回给客户端; 由于360搜索提供的格式可能会发生改变, 会造成接口无法使用, 下面贴出的源码也需要对应修改; 下图网页源码中的 格式 ...

GreenDao使用中遇到的异常

类型 Character 无法直接存储到数据库 Character 类型不是原始支持的类型, 转换为 String 类型存储到数据库; private String firstCharString = "~"; @Transient private Character firstChar = '~';//放弃存储 public void setFirstCharString(String firstCharString) { // 在 set String 时, 给 Character 赋值 if (firstCharString.length() > 0) { firstChar = firstCharString.charAt(0); } else { firstChar = ...

centOS FTP 安装配置

服务器为 VPS 1:卸载已装 vsftpd, 如果有 rpm -aq vsftpd 查看vsftpd版本(假设返回 “vsftpd-2.0.5-16.el55.1” ) rpm -e vsftpd-2.0.5-16.el55.1 删除该版本 2:安装 vsftpd yum install -y vsftpd 3:更改FTP配置文件 vi /etc/vsftpd/vsftpd.conf 将 vsftpd.conf 中 anonymousenable=YES 改为 anonymousenable=NO, 禁止匿名登录 4:给系统添加一个用户用于登陆 ftp 只可访问 /var/www/html/ 目录 useradd -d /var/www/html/ -s /sbin/nologin ftpuser 1 u ...

macOS 系统重装

身为程序员, 总是避免不了帮周围的人修电脑, 今天帮一台最近刚买的 Macbook air 重装了系统; 关于这台 Macbook air 一般来说, 正常使用 Mac, 重装系统是很简单的, 但是这台电脑的 macOS 已经被格掉了, 到我手上时, 机子已经被装上了 win10, 128G 硬盘被分成了三个区; 对方的近期需求是用这台电脑写毕业论文, 由于担心 macOS 下做出的 Word 文档格式在 windows 下不同, 所以需要一个windows系统。给上一个人处理后就直接格盘装上了windows,系统盘才30多个G;一开始以为256G所以打算使用“Boot Camp 助理” 添加windows系统,到 ...