我需要决定一个将二进制元素包含到消息对象中的模式,以便可以在接收端再次解码它(在我的情况下是 Rabbit MQ / AMQP 队列上的消费者)。
我决定不使用 JSON 进行多部分 MIME 编码,主要是因为它看起来像是使用雷神之锤来推图钉。我决定不手动连接各个部分(二进制和 JSON 连接在一起),主要是因为每次出现新需求时都需要进行整体重新设计。在其中一个字段中编码二进制文件的 JSON 似乎是一种优雅的解决方案。
我看似可行的解决方案(通过比较发送和接收数据的 MD5 和来确认)解决方案执行以下操作:
def json_serialiser(byte_obj):
if isinstance(byte_obj, (bytes, bytearray)):
# File Bytes to Base64 Bytes then to String
return base64.b64encode(byte_obj).decode('utf-8')
raise ValueError('No encoding handler for data type ' + type(byte_obj))
def make_msg(filename, filedata):
d = {"filename": filename,
"datalen": len(filedata),
"data": filedata}
return json.dumps(d, default=json_serialiser)
Run Code Online (Sandbox Code Playgroud)
在接收端我只需这样做:
def parse_json(msg):
d = json.loads(msg)
data = d.pop('data')
return base64.b64decode(data), d
def file_callback(ch, method, properties, body):
filedata, fileinfo = parse_json(body) …Run Code Online (Sandbox Code Playgroud) 我可以创建和使用简单的 Mixin,但要在 mixin 的方法中访问 setState、mounted、context 等,我需要将它们作为参数从 State 类传递给。
当我使用一些样板代码在 State 上创建 Mixin 以在任何有状态小部件的 State 上使用它时,但我收到两个错误:
error:
The class '_ProfilePageState' cannot implement both 'State<ProfilePage>' and 'State<StatefulWidget>'
because the type arguments are different.
Run Code Online (Sandbox Code Playgroud)
error:
Type parameters could not be inferred for the mixin 'NotificationHandlers'
because no type parameter substitution could be found matching the mixin's supertype constraints.
Run Code Online (Sandbox Code Playgroud)
该mixin定义是这样的:
error:
The class '_ProfilePageState' cannot implement both 'State<ProfilePage>' and 'State<StatefulWidget>'
because the type arguments are different.
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中使用风味。我遵循了各种指南,但每次都因同样的问题而无法构建。(因为基本上每个博客文章和 SE 问题都引用相同的文章和资源,所以我不会再这样做了)
为了调试,我决定简化问题并启动一个新项目(正常示例项目),并添加风味,每种风味只有一个元素:应用程序。这有效。各种其他更复杂的属性,例如使用 res/values/strings.xml 作为应用程序标签也可以正常工作。
然后,我使用我的应用程序尝试了最简单的风味设置,其中的grade.build如下所示,然后很快就失败并出现相同的错误。
flavorDimensions "app"
productFlavors {
dev {
dimension "app"
}
qa {
dimension "app"
applicationId "com.example.app1"
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我还使用单独的入口点来实现运行时配置。这按预期工作并且已经使用了一段时间。
johan@komp:~/AndroidStudioProjects/parent_lite$ flutter run --flavor qa -t lib/main-qa.dart
Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
Launching lib/main-qa.dart on Android SDK built for x86 in debug mode...
Initializing gradle... 0.4s
Resolving dependencies... 1.2s
Running Gradle task 'assembleQaDebug'...
Running Gradle task 'assembleQaDebug'... Done 1.1s …Run Code Online (Sandbox Code Playgroud) 从已安装的 APK 运行应用程序时出现问题,但当直接从 Android Studio 运行时,应用程序运行良好。在物理设备和仿真器上进行测试,并使用构建模式调试、配置文件和发布(其中发布和配置文件模式当然仅适用于物理设备)
摘要:a) 共享首选项、路径提供程序和权限处理程序生成一个MissingPluginException. b) Android 后退按钮不起作用。
这些可能是单独的问题,但我强烈怀疑它们是相关的,因为只有当应用程序从不是直接从 Android Studio 安装的 APK 启动时才会发生。
非常清楚 - 如果我从 Android Studio 中“安装”该应用程序,那么即使没有 AS 连接,我也可以继续使用该应用程序。但是,当我构建一个 APK,手动安装它并尝试运行该应用程序时,我会遇到由上述错误引起的各种症状。如果我随后通过 Android Studio 连接 Logcat,问题将持续存在,直到我使用 AS 安装新版本。
更多细节:
Execution failed for task ':app:lintVitalQaRelease'.
> Could not resolve all artifacts for configuration ':app:devProfileRuntimeClasspath'.
> Failed to transform libs.jar to match attributes {artifactType=processed-jar, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
> Execution failed for JetifyTransform: /home/johan/AndroidStudioProjects/teacher_app/build/app/intermediates/flutter/devProfile/libs.jar.
> Transform's input file does not exist: /home/johan/AndroidStudioProjects/teacher_app/build/app/intermediates/flutter/devProfile/libs.jar. (See https://issuetracker.google.com/issues/158753935) …Run Code Online (Sandbox Code Playgroud) 我在将 UUID 值插入 Postgres 中的 UUID 数组列时遇到问题。
由于 psycopg2 不会自动将 Python UUID 值转换为 Postgres UUID,所以我使用类似的东西str(my_id)
然而,这是我第一次使用任何数组类型列。我得到的错误是:
psycopg2.ProgrammingError: column "items" is of type uuid[] but expression is of type text[]
LINE 3: ...0', NULL, '01adae1e-e2cf-11e4-b773-ac8112c8e1fb', ARRAY['01a...
^
HINT: You will need to rewrite or cast the expression.
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了这个错误,发现了一些(例如bug 2279、bug 2277)Postgres bug 报告暗示数组功能的实现不完整/缺失,但我不知道这些是否与我的问题有关。然而这些似乎已经得到解决。FWIW我正在使用Postgres 9.3.6
为了调试这个,我创建了一个小测试表,例如:
testdb=# \d test_table
Table "public.test_table"
Column | Type | Modifiers
-----------+---------+-----------
key | integer |
item_list | uuid[] |
Run Code Online (Sandbox Code Playgroud)
以及我的谈话测试的输出:
DEBUGGING:
Statement: …Run Code Online (Sandbox Code Playgroud) 我知道 flutter_local_notifications_plugin 允许应用程序显示通知。
我想访问收到的通知的数据,无论应用程序是在前台、后台运行还是未运行。
本质上,应用程序需要
- 将该通知添加到持久存储,以及
- 根据通知,调用 API(例如 HTTP GET),以及
- 根据用户首选项设置,显示本地通知
请注意,问题不在于实现这三件事的细节,因为这三件事都值得用整篇文章来写。但是如何在 Android 和 iOS 上的三种可能的应用程序状态中“接收”这些事件呢?
一般来说,我预计需要注册某种广播接收器,并且需要在触发事件时创建回调。我想这个回调可能想要处于特殊的隔离状态,因为它不能依赖于应用程序处于任何特定状态。
Google Play 警告我在抓取工具可以到达的每个页面的辅助功能测试中缺少内容标签。
我尝试向每个页面添加一个语义小部件以围绕脚手架的主体元素,我什至添加了一个额外容器作为该语义小部件的第一个子级,其double.infinity宽度和高度如下。
我唯一能想到做的另一件事就是使其成为脚手架的父级 - 但正确的解决方案是什么?
有点相关:SafeArea 应该是 Scaffold 的父元素还是 body 元素?
在尝试查找身份验证系统以向Web服务添加社交登录时,我有一些关于我应该使用的问题.我的要求是:
OpenID Connect听起来很合适,但我的理解是Facebook不支持它.
OAuth2通过有时称为反向流的方式提供解决方案.对于Web应用程序来说这似乎很好,但我不认为恶意用户可能会从其他应用程序中获取令牌并使用它们来冒充用户.我的理解是,这尤其是Client/Implicit Flow的一个问题.
有没有办法在移动应用程序中保护客户端的秘密?更具体地说,我可以在移动应用程序上实现一些东西,允许我在接受之前检查我的服务实际上是任何令牌的目标受众吗?
还有关于客户端ID /客户端密钥的第二个问题:
客户端将从授权服务器获取用户ID或电子邮件,并将其作为标识手段发送到后端,但后端需要验证这一点.为此,我想知道我还必须向后端发送什么?访问令牌?我是否在客户端和后端的授权服务器上使用相同的客户端ID和客户端密钥,以允许后端验证访问令牌?
我有一个现有的项目(20k 行代码),我现在想要为 iOS 构建(该项目是使用 Android 开发和测试的,但我确实检查了它所依赖的每个包是否表明 iOS 支持。)
我对 Mac 完全陌生(我花了一段时间才弄清楚如何通过 GUI 启动应用程序),但我设法完成了 MacOS 的 Flutter 设置指南。
Flutter doctor 显示一切正常,到目前为止示例 Flutter 应用程序可以在 Xcode iPhone 模拟器上运行。
该应用程序需要在构建或启动时指定一种风格, - 在 android 方面,我有 dev、qa 和 prod,每个都有完整和免费,即总共 6 种风格和单独的入口点。
现在,当我尝试从 Android Studio 在模拟器上运行应用程序时,出现错误
Xcode 项目没有定义自定义方案。
您不能使用 --flavor 选项。
无法为模拟器构建应用程序。
在 iPhone 11 Pro Max 上启动应用程序时出错。
在 android 方面,我使用多个 src 目录结构与 AndroidManifest 文件和单独的 mipmap 资源目录,加上一个脚本来根据风格切换资产包。Flavors 分别指定了一个特定的 main-*.dart 入口点/目标,并且有一系列 googleservices.json 文件也对应于这些 flavor。
我现在需要一种方法将所有这些转换为 xcode - 我认为它被称为“架构”。我认为我需要一个工具来设置模式(如果失败,则需要一个脚本来在构建过程中设置每个风格的部分)。或者他们被称为跑步者档案?
我的问题是这个工具在哪里。有命令行版本吗?我可以以某种方式启动 Xcode GUI 并为 Android Studio 中的项目设置架构吗?一旦我真正看到它的样子,许多博客中使用的许多术语可能会变得清晰。
一旦我有了工具,我从阅读其他人的问题中意识到下一个障碍将是查看需要特定设置/调整的地方才能让 iOS 构建通过,我认为这对于某些软件包来说尤其是一个问题,但是对于现在我仍在研究工具。 …
我对如何正确执行此操作有一些疑问 - Flutter 团队关于使用 Flavors 的文档有些缺乏,到目前为止,教程和文章似乎都来自那些在了解它时发布的人。我很欣赏这里的努力,但也认识到知识是不完整的。
应用程序 ID 可以在多个位置设置,特别是在 AndroidManifest 和 build.gradle 文件中。
例子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.app">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
例子:
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.domain.appname"
minSdkVersion 23
targetSdkVersion …Run Code Online (Sandbox Code Playgroud) build android-productflavors flutter android-build-flavors applicationid