个人做笔记用

由于每次解决过的错误,过很久后不记得,导致再次遇到又要花很久才能找到解决方案,故此每次解决的问题,或者看到的很好的想法都记录下来,方便自己查阅

release模式下运行报错:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, Field state_ for o.r not found. Known fields are [private int o.r.h, private static final o.r o.r.i, private static volatile q.a1 o.r.j], null, java.lang.RuntimeException: Field state_ for o.r not found. Known fields are [private int o.r.h, private static final o.r o.r.i, private static volatile q.a1 o.r.j]
E/flutter (23106):      at q.v0.n0(Unknown Source:72)
E/flutter (23106):      at q.v0.T(Unknown Source:655)
E/flutter (23106):      at q.v0.R(Unknown Source:12)
E/flutter (23106):      at q.k0.e(Unknown Source:60)
E/flutter (23106):      at q.k0.a(Unknown Source:49)
E/flutter (23106):      at q.d1.d(Unknown Source:17)
E/flutter (23106):      at q.d1.e(Unknown Source:4)
E/flutter (23106):      at q.z.A(Unknown Source:4)
E/flutter (23106):      at q.z$a.q(Unknown Source:9)
E/flutter (23106):      at q.z$a.p(Unknown Source:0)
E/flutter (23106):      at o.i.onMethodCall(Unknown Source:800)
E/flutter (23106):      at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(Unknown Source:17)
E/flutter (23106):      at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(Unknown Source:18)
E/flutter (23106):      at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0(Unknown Source:40)
E/flutter (23106):      at io.flutter.embedding.engine.dart.DartMessenger.a(Unknown Source:0)
E/flutter (23106):      at io.flutter.embedding.engine.dart.a.run(Unknown Source:12)
E/flutter (23106):      at android.os.Handler.handleCallback(Handler.java:966)
E/flutter (23106):      at android.os.Handler.dispatchMessage(Handler.java:110)
E/flutter (23106):      at android.os.Looper.loopOnce(Looper.java:205)
E/flutter (23106):      at android.os.Looper.loop(Looper.java:293)
E/flutter (23106):      at android.app.ActivityThread.main(ActivityThread.java:9596)
E/flutter (23106):      at java.lang.reflect.Method.invoke(Native Method)
E/flutter (23106):      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
E/flutter (23106):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)
E/flutter (23106): )
E/flutter (23106): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:653)
E/flutter (23106): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:315)
E/flutter (23106): <asynchronous suspension>
E/flutter (23106): #2      FlutterBluePlus.state (package:flutter_blue_plus/src/flutter_blue_plus.dart:91)
E/flutter (23106): <asynchronous suspension>
E/flutter (23106): #3      Stream.last.<anonymous closure> (dart:async/stream.dart:1605)
E/flutter (23106): <asynchronous suspension>
E/flutter (23106): 

解决方法有两种:

  1. 修改项目下android目录下 build.gradler

文件

修改配置如下:

buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
           // minifyEnabled true
            shrinkResources false
            minifyEnabled false
           // useProguard true

           // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

此修改不是特别好

  1. 通过修改proguard-rules.pro*文件,此文件也是项目下android目录下,修改配置如下:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class com.boskokg.flutter_blue_plus.** { *; }

最后一行就是解决这次的错误,根据使用的组件报错信息,添加配置信息

升级gitea

  • 停止正在运行的容器
docker stop {containerId} //{containerId} 换成实际的容器ID

备份数据这步,正常用不到,只要不是跨太多版本,不会有问题

  • 删除容器
docker rm {containerID} //{containerID}换成实际容器ID

这里不删除的话会导致后面启动容器失败

  • 拉取最新版本镜像
docker pull gitea/gitea:latest 
  • 运行最新版的gitea
docker run -e 'USER_UID=1000' -e  'USER_GID=1000' -d --restart always -p "3000:3000" --name gitea_code_server  -v /home/gitea/data:/data -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro gitea/gitea:latest

上面如果不删除容器,名称就会重复,如果不想删的话,可以这里改下名字

注意:如果数据比较重要,还是删除停止容器前先备份一下,步骤如下:

  1. 找到容器在本机的位置:
docker inspect {containerName}//{containerName} 替换成容器名称

执行上面的指令会出现json结构文本,地址就在MountsSource属性里

  1. 执行复制指令
cp -r /root/.gitea/gitea /root/.gitea/gitea:2023  # 备份并重命名为gitea:2023

升级后发现报错 Unable to render this definition

文件

查看控制台发现返回的内容是byte数组,经过查看github issues需要添加针对byte转换器

解决方法如下

ConfigurerAdapter 类文件的 configureMessageConverters 方法里加入

 @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 使用 fastjson 序列化,会导致 @JsonIgnore 失效,可以使用 @JSONField(serialize = false) 替换
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        List<MediaType> supportMediaTypeList = new ArrayList<>();
        supportMediaTypeList.add(MediaType.APPLICATION_JSON);
        supportMediaTypeList.add(MediaType.TEXT_PLAIN);
        FastJsonConfig config = new FastJsonConfig();
        config.setWriterFeatures(JSONWriter.Feature.WriteEnumsUsingName, JSONWriter.Feature.NotWriteRootClassName);
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        converter.setFastJsonConfig(config);
        converter.setSupportedMediaTypes(supportMediaTypeList);
        converter.setDefaultCharset(StandardCharsets.UTF_8);


        converters.add(new ByteArrayHttpMessageConverter());//主要添加这一行


        converters.add(converter);
    }