2019-04-20 Android Parameter type must not include a type variable or wildcard: java.util.Map<java.lang.String, ? extends okhttp3.RequestBody> (parameter #1) Android (kotlin 开发) 应用访问接口,出现如下错误: 12java.lang.IllegalArgumentException: Parameter type must not include a type variable or wildcard: java.util.Map<java.lang.String, ? extends okhttp3.RequestBody> (parameter #1) for method StoryService.addStory 接口: 123@Multipart@POST("story")fun addStory(@PartMap params: Map<String, RequestBody>): Call<Story> 解决办法,在 RequestBody 前添加注解 @JvmSuppressWildcards : 123@Multipart@POST("story")fun addStory(@PartMap params: Map<String, @JvmSuppressWildcards RequestBody>): Call<Story> 参考: https://stackoverflow.com/questions/45785874/multipart-request-with-retrofit-partmap-error-in-kotlin-android
2019-04-12 PHP Ubuntu 安装 PHP 的 zmq 扩展 Ubuntu 18.04.2 LTS 直接用命令安装即可: 1sudo apt install php-zmq 查看已安装的扩展: 1php -m
2019-04-06 Android widget has an unresolved type,and thus it was upcasted to android.view.View 使用 Kotlin 的 View Binding 来绑定 View, 对于框架提供的控件没有任何问题,但是对自定义控件会出现如下错误: 比如,有自定义控件 com.example.customText xx.xml 1234<com.example.customText adnroid:id='@+id/custom_text' .../> 如果直接使用 1custom_text.text = 'Hello' 会有如下错误 1widget has an unresolved type 'com.example.customText',and thus it was upcasted to 'android.view.View' 需要先做类型转换: 12val customtext as customTextcustomtext.text = 'Hello'
2019-03-28 PHP►Laravel Laravel timestamp 博客数据库中有个 published_at 字段,主要是为了实现延迟发布的功能,但发现每次查看博文时,published_at 都会自动更新,打开博文时,唯一做的更新操作是为了统计浏览量: $post->increment('view_count',1);, SQL 如下: 1update `posts` set `view_count` = `view_count` + 1, `updated_at` = '2017-08-17 18:30:33' where `id` = '1' and `posts`.`deleted_at` is null 并没有做更新 published_at 的操作呀? 后来去数据库查看字段设置,发现 published_at 默认勾选了 根据当前时间戳更新,而 created_at 和 update_at 却默认没有勾选根据当前时间戳更新,而 created_at 和 update_at 是同过 $this->timestamps() 生成的,于是查看 timestamps() 源码: 123456public function timestamps(){ $this->timestamp('created_at')->nullable(); $this->timestamp('updated_at')->nullable();} 原来这俩个字段默认设置允许为空,而我建立数据表是这样写的$table->timestamp('published_at'); ,默认不为空,于是做修改 $this->timestamp('published_at')->nullable(); ,解决问题。 可知, MySQL 中,timestamp 类型的字段,如果不允许为空,那么 mysql 会自动维护,所有的更新操作都会引起该字段值的改变。
2019-03-15 Linux Leaning Linux:包管理 打包格式和工具: 操作系统 格式 工具 Debian .deb apt, apt-cache, apt-get, dpkg Ubuntu .deb apt, apt-cache, apt-get, dpkg CentOS .rpm yum Fedora .rpm dnf FreeBSD Ports, txz make, pkg 更新包列表: 系统 命令 Debian / Ubuntu sudo apt-get update sudo apt update CentOS yum check-update Fedora dnf check-update FreeBSD Packages sudo pkg update FreeBSD Ports sudo portsnap fetch update 更新已安装的包: 系统 命令 说明 Debian / Ubuntu sudo apt-get upgrade 只更新已安装的包 sudo apt-get dist-upgrade 可能会增加或删除包以满足新的依赖 sudo apt upgrade 同 apt-get upgrade sduo apt full-upgrade 同 apt-get dist-upgrade CentOS sudo yum update Fedora sudo dnf upgrade FreeBSD Packages sudo pkg upgrade FreeBSD Ports less /usr/ports/UPDATING 使用 less 来查看 ports 的更新提示(使用上下光标键滚动,按 q 退出) cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a 安装 portmaster 然后使用它更新已安装的 ports 搜索某个包: 系统 命令 说明 Debian / Ubuntu apt-cache search search_string apt search search_string CentOS yum search search_string yum search all search_string 搜索所有的字段,包括描述 Fedora dnf search search_string dnf search all search_string FreeBSD Packages pkg search search_string pkg search -f search_string pkg search -D search_string FreeBSD Ports cd /usr/ports && make search name=package cd /usr/ports && make search key=search_string 查看某个软件包的信息: 系统 命令 说明 Debian / Ubuntu apt-cache show package 显示有关报的本地缓存信息 apt show package dpkg -s package 显示包的当前安装状态 CentOS yum info package yum deeplist package 列出包的依赖 Fedora dnf info package dnf repoquery –requires package 列出包的依赖 FreeBSD Packages pkg info package 显示已安装的包的信息 FreeBSD Ports cd /usr/ports/category/port && cat pkg-descr 安装: install 删除一个或多个已安装的包: 系统 命令 说明 Debian / Ubuntu sudo apt-get remove package sudo apt remove package sudo apt-get autoremove CentOS sudo yum remove package Fedora sudo dnf erase package FreeBSD Packages sudo pkg delete package sudo pkg autoremove FreeBSD Ports sudo pkg delete package cd /usr/ports/path_to_port && make deinstall
2019-03-11 Kotlin Learning Kotlin: 修饰符 public / protected / private / internal expect / actual final / open / abstract / sealed / const external override lateinit tailrec vararg suspend inner enum / annotation companion inline infix operator data