我是 Android 开发新手。目前,我正在使用 Jetpack Compose 来构建 Android 应用程序。我也在学习MVVM架构。
对于这种架构,我不明白的一件事是为什么我们需要使用它ViewModelProvider.Factory
来将视图模型传递到屏幕。
例如,
取而代之的是,
@Composable
fun HomeScreen() {
val factory = object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
val repository = InMemoryPlantService()
@Suppress("UNCHECKED_CAST")
return HomeViewModel(
plantRepository = repository
) as T
}
}
val homeViewModel: HomeViewModel = viewModel(null, factory)
val currentState: State<HomeViewState> = homeViewModel.viewState.collectAsState()
HomeScreenScaffold(currentState.value)
}
Run Code Online (Sandbox Code Playgroud)
我们不能这样做吗
@Composable
fun HomeScreen() {
val repository = InMemoryPlantService()
val homeViewModel: HomeViewModel = HomeViewModel(
plantRepository = repository
)
val …
Run Code Online (Sandbox Code Playgroud) stackoverflow 上已经有这个问题的不同版本,但没有一个版本可以帮助我深入了解问题。因此,我在这里再次详细介绍我的问题。
我们一直随机得到Transaction (Process ID xx) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
. 让我澄清一下,这不是行级或表级锁定。我已经尝试了足够多的猜测/随机的事情;我需要有关如何解决通信缓冲区死锁问题的准确分步指南。
如果您对具体细节感兴趣,请继续阅读。
场景的具体细节:我们有一个非常简单的基于 Dapper ORM 的 C# .net core Web API,它接受请求并对托管在该 Microsoft Sql 服务器上的数据库执行 CRUD 操作。为此,连接管理器(注册为范围服务)IDbConnection
在请求范围内打开一个新连接;该连接用于执行删除、插入、更新或获取。对于插入/更新/删除 C# 行看起来像这样await connection.ExecuteAsync("<Create update or delete statement>", entity);
对于GET
请求,我们只需运行await connection.QueryFirstOrDefaultAsync<TEntity>("<select statement>", entity);
; 有 5 种类型的实体(全部呈现简单的非关系表)。它们都是通过 ID 进行 CRUD 的。
到目前为止已经尝试过什么
我正在尝试声明一个字符串列表并向其添加 DateTime。但是,cannot convert from 'System.Collections.Generic.List<string>' to 'string'
当我执行以下操作时出现错误:
public List<string> AllTime_ = new List<string>();
void Start () {
AllTime_.Add(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("HH")).ToList ());
AllTime_.Add(Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("mm")).ToList ());
}
Run Code Online (Sandbox Code Playgroud)
但是当我通过声明如下所示的 List 来做同样的事情时,它不会抛出任何错误并且运行良好。唯一的问题是重新定义了列表并且列表的大小发生了变化。如何通过添加到列表来尝试解决问题的第一种方法?
public List<string> AllTime_ = new List<string>();
void Start () {
AllTime_ = new List<string> (Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("HH")).ToList ());
AllTime_ = new List<string> (Data.Select (d => DateTime.ParseExact (d, "yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString ("mm")).ToList …
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现合并排序算法,但我不知道为什么delete[] right
会抛出异常:
Invalid address specified to RtlValidateHeap
.
删除该行可以解决问题,但这会导致内存泄漏,对吗?delete[] left
这里不会造成问题。
void Merge(int data[], int from, int middle, int to)
{
int leftLength = middle - from + 1;
int rightLength = to - middle;
int* left = new int[leftLength + 1];
int* right = new int[rightLength + 1];
for (int i = 0; i < leftLength; i++)
{
left[i] = data[from + i];
}
for (int i = 0; i < rightLength; i++)
{
right[i] = …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在用户响应后删除内联键盘按钮的方法。在用户输入 /default 后,电报机器人会要求用户选择一个选项。我希望能够删除用户多次选择响应按钮的选项。下面是我的示例代码,我使用的是 python-telegram-bot 包。
list_default_options = ['a', 'b',
'c', 'd']
def default_options(update, context):
"""Generates responses for default options."""
button_list = []
for each in list_options:
button_list.append(InlineKeyboardButton(each, callback_data=each))
reply_markup = InlineKeyboardMarkup(build_menu(button_list, n_cols=2))
context.bot.send_message(chat_id=update.message.chat_id,
text="Choose option",
reply_markup=reply_markup)
def build_menu(buttons, n_cols=1, header_buttons=None, footer_buttons=None):
"""
Returns a list of inline buttons used to generate inlinekeyboard responses
:param buttons: `List` of InlineKeyboardButton
:param n_cols: Number of columns (number of list of buttons)
:param header_buttons: First button value
:param footer_buttons: Last button value
:return: `List` …
Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经编写了在程序中只调用一次内核的程序
所以我有一个内核
__global__ void someKernel(float * d_in ){ //Any parameters
//some operation
}
Run Code Online (Sandbox Code Playgroud)
我基本上是这样做的
main()
{
//create an array in device memory
cudaMalloc(......);
//move host data to that array
cudaMemcpy(......,cudaMemcpyHostToDevice);
//call the kernel
someKernel<< <nblocks,512>> >(.......);
//copy results to host memory
cudaMemcpy(......,cudaMemcpyDeviceToHost);
// Point to notice HERE
}
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是这次我想不仅一次而且多次调用内核 类似
main()
{
//create an array in device memory
cudaMalloc(......);
//move host data to that array
cudaMemcpy(......,cudaMemcpyHostToDevice);
//call the kernel
someKernel<< <nblocks,512>> >(.......);
//copy results to host memory
cudaMemcpy(......,cudaMemcpyDeviceToHost);
// From …
Run Code Online (Sandbox Code Playgroud) 我正在使用反应本机视频
它有一个名为的道具poster
,运行良好。但我的要求是从视频中获取缩略图(视频的第一帧)。如果我不使用poster
(接受网址),那么它会显示空白屏幕。
知道如何使用视频的第一帧作为缩略图吗?
谢谢你!!!
我有两个表 table1 和 table2。两者都有 4 列具有相同的列名。table1 有 50 行,table2 有 100 行。我怎样才能只从 table2 中获取那些在 table1 中不存在的行。我尝试执行左连接,但我无法做到这一点,因为我们无法使用所有列进行左连接。
首先,我只想说我对 AWS 总体来说还是个新手(1-2 周)。所以我可能从一开始就认为不正确。
我正在开发一个应用程序,我想在 JSX 中单击按钮并触发 Lambda 函数,该函数从 dynamodb 表获取数据并将其显示在 UI 中。
我正在使用 aws cdk 将基础设施编写为代码。我该怎么面对这个?您有我可以遵循的指南吗?
c# ×2
c++ ×2
android ×1
aws-cdk ×1
aws-lambda ×1
cuda ×1
deadlock ×1
grafana ×1
kdb ×1
kotlin ×1
mvvm ×1
prometheus ×1
python ×1
react-native ×1
serverless ×1
sql-server ×1
sqlexception ×1
telegram ×1