从零开始学习React:了解当前React常用技术,编写第一个React组件
从零开始学习React:了解组件的三大属性

上一节我们简单介绍了React的相关技术栈,以及如何在一个 html 文件中使用 React,创建一个React 组件并渲染到Html 中。

本节我们来介绍在 React 中 一个组件比较重要的三大属性

阅读全文 »

React 与 Vue 可以说是现阶段最热门的前端UI框架了,最近开始学习 React,准备开一个新坑:从零开始学习React,主要是学习时的一些思考与记录,如有谬误,烦请斧正。由于前端技术的快速迭代,我会在适当位置标注版本信息,以免出现货不对板。

阅读全文 »

匿名内部类在 Java 中是经常用到的一个特性,例如在 Android 开发中的各种 Listener,使用时也很简单,比如:

1
2
3
4
5
6
7
8
9
10
11
12

//lambda
button.setOnClickListener(v -> {
//do some thing
});
//匿名内部类
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do some thing
}
});
阅读全文 »

在 Compose 中使用协程

Kotlin 中协程有多好用,想必不用我多说了。方便的构建、简洁的切换协程语法、await函数与join函数,尤其是在 lifecycle 扩展出现之后,在 Activity 与 Fragment 中可以通过类似 lifecycleScope.launch { } 这样的语法更方便的使用协程。

之前我们介绍过,Compose 是 FP 风格的,UI是通过一个个Composable函数组合在一起形成的,自然不能用lifecycleScope.launch { },那么在 Compose 中我们该如何使用协程呢?

阅读全文 »

Android Gradle Plugin(后简称为AGP),在 7.0 版本之后与 Gradle 版本版本号保持同步(大喜,不需要再去查 gradle 与 AGP 的版本号对应了)。

本文记录了在AS升级到 Android Studio Bumblebee | 2021.1.1 版本后,项目默认创建使用 AGP 7.1.0 的一些注意事项。

先看一个在 Gradle 6.7.1+AGP 4.2 时代(后简称为AGP 6.0)最常见的项目配置:

阅读全文 »

按照官网的手动集成步骤一步一步完成,但是在运行打开 FlutterActivity 时出现了了如下错误:

1
2
3
4
5
E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(18)] VM snapshot invalid and could not be inferred from settings.
E/flutter: [ERROR:flutter/runtime/dart_vm.cc(250)] Could not setup VM data to bootstrap the VM from.
E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(84)] Could not create Dart VM instance.
A/flutter: [FATAL:flutter/shell/common/shell.cc(274)] Check failed: vm. Must be able to initialize the VM.

百度该错误定位到的问题解释有两种:

阅读全文 »

简断截说,上代码!

举例:

1
2
3
4
5
6
7
8
9
10
11
fun login(name:String,pass:String){
HttpMethods.webService.login(name,pass){
override fun onSuccess(bean: LoginBean) {
connect(bean.token)
}
override fun onError(e: Exception) {
}
}
fun connect(token:String){
......//调用方法,从回调函数获取连接状态
}
阅读全文 »

错误日志如下:

java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of ‘java.lang.invoke.LambdaMetafactory’ appears in /apex/com.android.runtime/javalib/core-oj.jar)

原因:
新版本的 Retrofit 使用到了JAVA8 的Lambda表达式,项目中需要使用JAVA1.8,否则无法正常使用。

点击File -> Project Structure->Modules -> Properties 设置Source Compatibility和 Target Compatibility两项为 JDK8就可以了

农神食其子-戈雅

《农神食其子》描绘的是农神「克洛诺斯」吞噬他的神子的画面。农神因为惧怕其子女未来推翻自己作为神王的统治地位,便吞噬了他的五个子女。

抛开故事本身,其实大多数父亲也都有「食子」情节。随着儿子的成长,在家庭中开始不断寻求地位的变化,要求与父母平等的对话,这时候父亲的地位是不断受到挑战的,「食子」情节也就此埋下。

阅读全文 »

DatePickerDialog 是我们常用系统自带的日期选择对话框,但有时我们仅需要选择 年月 或者仅需要选择 月日,这种情况我们应该如何快速实现该功能呢?

直接百度搜索给出的帖子里最接近正确答案的是这篇文章:
【Android DatePickerDialog只显示年月或只显示月日】,但是你如果直接照搬,大概率是没有效果,原因在于Dialog的格式

阅读全文 »

上文我们已经知道了,在没有CoroutineScope时,我们可以通过实现该接口,或者使用 runBlocking 方法,来使我们的程序可以调用 suspend 挂起函数。

今天我们来看看 Builders.common 下的几个构建协程函数:launchasync 函数

阅读全文 »

  1. 在 res/xml 文件夹下新建一个 xml 文件 network_security_config.xml,内容如下:
    1
    2
    3
    4
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
    <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
  2. 在 Androidmanifest application 节点增加如下内容:
    1
    2
    3
    4
    5
    6
    <application
    ....
    android:networkSecurityConfig="@xml/network_security_config"
    android:usesCleartextTraffic="true">
    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
    </application>
0%