在Android上使用Firebase Cloud Messaging时,通常希望将Activity
传入的推送通知通知当前。推荐的一种方法是使用LocalBroadcastManager
来将实现Intent
从FirebaseMessagingService
实现发送到Activity
(StackOverflow示例答案)。
但是,从1.1.0-alpha01(2018-12-17)版本开始,LocalBroadcastManager
不推荐使用:
LocalBroadcastManager是应用程序范围的事件总线,在您的应用程序中包含违反层的行为:任何组件都可以侦听其他任何事件。您可以
LocalBroadcastManager
用其他可观察模式的实现方式代替的用法,具体取决于您的用例,这些选项可能是LiveData或响应流。
尽管此类很可能会保留更长的时间,但我还是想开始清理我们的应用程序,因此我想迁移到更好的方法,然后Google真正删除旧方法。
目前,这些本地广播在我们的应用程序中具有两个主要角色:
Activity
关心传入推送数据的人都有一个广播接收器,该接收器侦听适当的消息并更新其自己的视图数据。如我所见,这些用例在两个建议的替代方案上都有问题:
LiveData
最容易用于Activity
或Fragment
作为的一部分ViewModel
。但是,ViewModel
只能用于直接处理UI的那些类。从架构ViewModel
内部访问FirebaseMessagingService
会带来丑陋的结果,从架构的角度来看,这确实是一个坏主意。另外,不同的活动和片段具有不同的ViewModel
对象,我不希望该服务需要访问它们全部。object
具有一系列LiveData
属性的Kotlin (又称Singleton),从传入消息中FirebaseMessagingService
更新这些LiveData
对象,并Activity
观察这些更改并将其复制到其自己ViewModel
的LiveData
属性中。问题是双重的:首先,它要求我LiveData
为每个数据块拥有两个相同的对象,一个在中ViewModel
,一个在中object
;第二,它对处理“注销事件”没有帮助,因为LiveData
它是用来处理变化的数据,而不是侦听事件流。(我也许可以使用“ LiveData
事件包装器”处理第二个问题,但是对于那些本来无法正常工作的东西来说,这仍然感觉很糟糕。)我发现的一个建议是将Kotlin …
我正在尝试使用单一服务在Linux上运行Windows .NET-4.0服务.它不是用单声道或任何东西编译的.我不是100%它可行,但我想我可以尝试(二进制兼容等,似乎可行吗?).如我错了请纠正我.
我收到错误,它找不到一些dll.他们在系统中,但它没有找到它们.这是一个.
$ ldconfig -p | grep Posix
libMonoPosixHelper.so (libc6,x86-64) => /usr/lib/libMonoPosixHelper.so
Run Code Online (Sandbox Code Playgroud)
我尝试添加路径等但没有变化.
$ MONO_LOG_LEVEL=debug mono-service MyService.exe --debug > output.log
Run Code Online (Sandbox Code Playgroud)
要么
$ MONO_PATH=/usr/lib MONO_LOG_LEVEL=debug mono-service MyService.exe --debug > output.log
Run Code Online (Sandbox Code Playgroud)
或LD_LIBRARY_PATH,这是空的,所以我试过
export LD_LIBRARY_PATH=/usr/lib
Run Code Online (Sandbox Code Playgroud)
在输出中总是这样:
Mono: DllImport attempting to load: 'libMonoPosixHelper.so'.
Mono: DllImport loading library: '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so'.
Mono: DllImport error loading library '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so: cannot open shared object file: No such file or directory'.
Mono: DllImport loading library: '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so'.
Mono: DllImport error loading library '/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/libMonoPosixHelper.so: cannot open shared object file: No …
Run Code Online (Sandbox Code Playgroud) 我遇到了Eloquent morphOne
关系的问题,即创建新条目而不是更新已存在的条目.
基本上我有一些模型(例如,让我们说Person
和Building
)都需要一个位置,所以我创建了一个Location
模型:
class Location extends Eloquent {
public function locationable()
{
return $this->morphTo();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的其他模型中我有这个:
class Person extends Eloquent {
// ...
/**
* Get the person's location
*
* @return Location
*/
public function location()
{
return $this->morphOne('Location', 'locationable');
}
// ...
Run Code Online (Sandbox Code Playgroud)
class Building extends Eloquent {
// ...
/**
* Get the building's location
*
* @return Location
*/
public function location()
{
return $this->morphOne('Location', 'locationable');
}
// ... …
Run Code Online (Sandbox Code Playgroud) 我正在使用koush的这个AndroidSync库来创建websocket(服务器/客户端)并在两个Android设备之间传输数据.这两个设备通过wifi连接(一个是Wifi AP,另一个连接到它).在发送请求4-5秒后,我在客户端设备中收到TimeoutException.这就是我到目前为止所做的......
ServerActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
mSockets = new ArrayList<WebSocket>();
mAsyncHttpServer = new AsyncHttpServer();
mWebSocketCallback = new AsyncHttpServer.WebSocketRequestCallback() {
@Override
public void onConnected(final WebSocket webSocket, RequestHeaders headers) {
mSockets.add(webSocket);
webSocket.send("Welcome Client");
webSocket.setClosedCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
try {
if (ex != null)
Log.e("WebSocket", "Error");
} finally {
mSockets.remove(webSocket);
}
}
});
webSocket.setStringCallback(new WebSocket.StringCallback() {
@Override
public void onStringAvailable(String s) {
Log.d("SERVERTAG",s);
Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
}
});
}
};
mAsyncHttpServer.websocket("/",mWebSocketCallback);
mAsyncHttpServer.listen(Utils.PORT_NUMBER); …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Xcode 13.1 中内置的 Swift 包管理器(不是使用 的命令行版本Package.swift
)。
我的依赖项之一是纯二进制包。该包的外观如下Package.swift
:
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
dependencies: [],
targets: [
.binaryTarget(
name: "MyLibrary",
url: "https://gitlab.example.com/api/v4/projects/85/packages/generic/mylibrary/1.0.1/MyLibrary.xcframework.zip",
checksum: "..."
)
]
)
Run Code Online (Sandbox Code Playgroud)
该二进制文件存储在 GitLab 的通用包存储库中。
我已将托管包的 Git 存储库添加到项目中的“包依赖项”中。我已经生成了一个具有 API 和存储库访问权限的个人访问令牌,并将其添加到我的.netrc
文件中:
machine gitlab.example.com
login gitlab-token
password MY_TOKEN_HERE
Run Code Online (Sandbox Code Playgroud)
当我在 Xcode GUI 中运行xcodebuild -resolvePackageDependencies
或使用“文件”->“包”->“解析包版本”时,Git 存储库已成功克隆,但收到以下错误消息:
failed downloading 'https://gitlab.example.com/api/v4/projects/85/packages/generic/mylibrary/1.0.1/MyLibrary.xcframework.zip' which is required by binary target 'MyLibrary': badResponseStatusCode(401)
Run Code Online (Sandbox Code Playgroud)
我尝试将相同的凭据添加到 …
我不是PHP编码器所以我需要一点PHP AES加密帮助.
我正在编写代码,我在PHP中加密图像文件,然后在Java(Android)中解密它们.当我加密/解密PNG文件时,一切正常,但当我尝试对JPG执行相同操作时,Java解密会引发异常:
WARN/System.err(345): java.io.IOException: data not block size aligned
Run Code Online (Sandbox Code Playgroud)
基于在线搜索,似乎这是因为我没有正确填充.
我该怎么做呢?
这是加密的PHP代码:
<?php
$secret_key = "01234567890abcde";
$iv = "fedcba9876543210";
$infile = "5.png";
$outfile = "5_encrypted.png";
$crypttext = file_get_contents($infile);
$plaintext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $crypttext, MCRYPT_MODE_CBC, $iv);
header('Content-Type: application/octet-stream');
header('Content-Length: ' . strlen($plaintext));
header('Content-Disposition: attachment; filename=' . ($outfile));
echo $plaintext;
//file_put_contents($outfile,$plaintext);
//save the file in the folder of server
Run Code Online (Sandbox Code Playgroud) 我有两个带有数据透视表的表
tours
id | name | country_id | featured
countries
id | name
country_tour
id | country_id | tour_id
我想找到一个具有游featured
旅行团表集的列1和country_id
的country_tour
表设置为1。
我有很多.sql
来自 PostgreSQL 数据库的文件。
(为了完整起见,它们是使用pg_extractor生成的,作为在 git 中签入数据库骨架的一种方式。有数百个 PL/pgSQL 函数也需要作为应用程序代码的一部分进行签入。开发人员致力于在其本地数据库服务器上运行函数,然后将其函数更改签入 git。)
在这些文件中,数据使用 PostgreSQL 命令表示COPY
。
例如我们的骨架数据库有如下表和数据:
CREATE TABLE roles (
id serial NOT NULL,
name text NOT NULL,
name_display text NOT NULL,
order_display integer NOT NULL
);
COPY roles (id, name, name_display, order_display) FROM stdin;
1 MASTER Master 1
2 ORGANIZATION_ADMIN Organization Admin 2
3 REGIONAL_ADMIN Regional Admin 3
4 BRANCH_ADMIN Branch Admin 5
5 SECURITY_ADMIN Security Admin 8
6 BRANCH_MANAGER Branch Manager 6
7 BRANCH_STAFF Branch …
Run Code Online (Sandbox Code Playgroud) 我有一个 Node.js 应用程序在使用以下(简化的)Docker Compose 配置设置的 Docker 容器中运行:
x-restart-policy: &restart_policy
restart: unless-stopped
x-sails-app-defaults: &sails_defaults
<< : *restart_policy
image: registry.example.com/group/webapp/snapshots
depends_on:
- postgres
services:
postgres:
<< : *restart_policy
image: postgis/postgis:11-3.1-alpine
environment:
POSTGRES_PASSWORD_FILE: /postgres-password
volumes:
- postgres:/var/lib/postgresql/data
- /root/postgres-setup-password:/postgres-password:ro
- ./postgres/setup.sh:/docker-entrypoint-initdb-resources/001-setup.sh:ro
webapp:
<< : *sails_defaults
volumes:
- ./apps/webapp.sailsrc:/usr/src/app/.sailsrc:ro
labels:
- traefik.enable=true
- traefik.http.routers.sbdev.entrypoints=https
- traefik.http.routers.sbdev.rule=Host(`app.example.com`)
- traefik.http.routers.sbdev.tls=true
- traefik.http.routers.sbdev.tls.certresolver=letsencrypt
Run Code Online (Sandbox Code Playgroud)
该应用程序的 Dockerfile 如下所示:
FROM node:fermium-alpine3.12 AS builderbase
# Need git and some other tools for npm install
RUN apk add --no-cache \
git \ …
Run Code Online (Sandbox Code Playgroud) 使用 Kotlin 1.5 时,Android Studio 会警告该版本String.capitalize
已弃用。
建议的替换是:
myString.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() })
Run Code Online (Sandbox Code Playgroud)
为什么需要检查isLowerCase
?
为什么我不能这样做:
myString.replaceFirstChar { it.titlecase(Locale.getDefault()) })
Run Code Online (Sandbox Code Playgroud) android ×2
kotlin ×2
laravel ×2
php ×2
.net-4.0 ×1
.netrc ×1
aes ×1
c# ×1
dns ×1
docker ×1
eloquent ×1
encryption ×1
firebase ×1
gitlab ×1
java ×1
laravel-4 ×1
laravel-5.3 ×1
linux ×1
mono ×1
mono-service ×1
padding ×1
polymorphism ×1
postgresql ×1
socket.io ×1
string ×1
swift ×1
title-case ×1
websocket ×1
xcode ×1