小编Ada*_*itz的帖子

getFragmentManager()在Kotlin中不起作用

我试图在我的项目中本地启动一个包含在库模块中的DialogFragment。我从中调用的类正在使用Kotlin,并且在函数getFragmentManager()上出现以下错误:下列任何函数均不能使用提供的参数进行调用

  import com.github.adamshurwitz.materialsearchtoolbar.SearchDialogFragment
    ...

    private var searchDialogFragment: SearchDialogFragment? = null
    ...

    searchDialogFragment = SearchDialogFragment()
    searchDialogFragment.show(supportFragmentManager, null)
Run Code Online (Sandbox Code Playgroud)

我在另一个项目中用Java调用它,并且使用getSupportFragmentManager()可以正常工作。

我尝试过的解决方案:

searchDialogFragment.show(getFragmentManager(), null)
searchDialogFragment.show(supportFragmentManager, null)
searchDialogFragment.show(supportFragmentManager as FragmentManager, null)
searchDialogFragment.show(supportFragmentManager.beginTransaction(), null)
searchDialogFragment.show(supportFragmentManager(), null)
Run Code Online (Sandbox Code Playgroud)

android kotlin

5
推荐指数
1
解决办法
4589
查看次数

Android Room:如何迁移列重命名?

问题

我的应用崩溃了,因为我没有正确处理迁移。我正在寻找一种迁移表中1列名称的解决方案。

在我的项目中,我有一个名为“ content ” 的房间表,其双人间属性为“ archivedCount ”。在该应用程序的最新版本中,属性archivedCount属性重命名为dismissCount,仍为Double类型

原始内容模型

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var archiveCount: Double) : Parcelable {...}
Run Code Online (Sandbox Code Playgroud)

新内容模型

@Entity(tableName = "content")
data class Content(@PrimaryKey var id: String, var dismissCount: Double) : Parcelable {...}
Run Code Online (Sandbox Code Playgroud)

尝试的解决方案

阅读了Google Developer Advocate的解释《用Room进行迁移》后,我尝试了在文章的“ 使用复杂的模式进行迁移 ”一节中概述的解决方案,该过程包括复制原始表,删除旧表,然后重命名新创建的表。

使用下面的以下方法,在此行上会出现运行时错误:database.execSQL("INSERT INTO content_new (id, dismissCount) SELECT id, archiveCount FROM users");因为我已经清除了应用程序的缓存,所以旧表不再存在。

是否可以在不重新创建整个表的情况下更新单个列?

static final Migration MIGRATION_1_2 = new Migration(1, 2) { …
Run Code Online (Sandbox Code Playgroud)

sql android android-sqlite android-room

5
推荐指数
2
解决办法
2424
查看次数

停止或删除已部署的 AppEngine 服务

问题

我按照使用 Gradle 和 App Engine 插件文档部署了一个 AppEngine 实例作为示例。我希望停止或删除已部署的版本。但是,我无法在 AppEngine 仪表板中执行此操作,因为STOP按钮灰显并显示

您只能停止手动缩放、基本缩放或在柔性环境中的版本。

在此处输入图片说明

当我部署Jar应用程序时,我能够停止在 AppEngine 仪表板中运行版本,但无法停止通过命令行部署的这个版本gradle appengineDeploy

尝试的解决方案

  1. 删除不是一个选项的项目,因为我有一个链接到 AppEngine 项目的 Firebase 项目。

  2. 停止版本。

命令gcloud app versions stop VERSIONS [appVersion]

错误(gcloud.app.versions.stop) INVALID_ARGUMENT: serving status cannot be changed for Automatic Scaling versions

  1. 删除服务。

命令gcloud app services delete service

错误INVALID_ARGUMENT: The default service (module) cannot be deleted.

java google-app-engine google-cloud-platform gradle-plugin

5
推荐指数
0
解决办法
1446
查看次数

在Firebase Cloud Functions中包含异步功能(附加错误“解析错误:意外的令牌功能”)

问题

如何将async辅助方法添加到Cloud Functions的 index.js文件中?转换为Promiseasync需要使用一个函数,如本StackOverflow文章中所述:fs.writeFile包含在promise,异步同步中。但是,lint不赞成在功能之外向index.js文件添加其他方法。awaitfs.writefileexports

错误

84行是辅助功能async function writeFile

用户/adamhurwitz/coinverse/coinverse-cloud-functions/functions/index.js 84:7错误解析错误:意外的令牌功能

?1个问题(1个错误,0个警告)

npm ERR!代码ELIFECYCLE

npm ERR!errno 1

npm ERR!功能@棉绒:eslint .

npm ERR!退出状态1

npm ERR!

npm ERR!在functions @ lint脚本上失败。

npm ERR!npm可能不是问题。上面可能还有其他日志记录输出。

npm ERR!可以在以下位置找到此运行的完整日志:

npm ERR!/用户/adamhurwitz/.npm/_logs/2018-12-12T01_47_50_684Z-debug.log

错误:函数预部署错误:命令以非零退出代码终止

设定

index.js

const path = require('path');
const os = require('os');
const fs = require('fs');
const fsPromises = require('fs').promises;
const util = require('util');
const admin …
Run Code Online (Sandbox Code Playgroud)

javascript node.js firebase google-cloud-functions firebase-cli

5
推荐指数
5
解决办法
2386
查看次数

“超出 5000 个字符限制”使用 SSML 与文本输入:Google 文本到语音 (TTS)

问题

按照使用 Google Cloud Platform 的Text-to-Speech API创建语音音频文件的文档,使用语音合成标记语言 ( SSML )时会发生以下错误,而使用与标准文本格式相同的内容时则不会出现错误。

这是使用SSML 时出现的错误,它似乎不准确,因为SSML的字符数远低于2979处的5000限制:

错误:3 INVALID_ARGUMENT:超出 5000 个字符限制。

Node.js 设置

const Speech = require('ssml-builder');
const textToSpeech = require('@google-cloud/text-to-speech');

...

const client = new textToSpeech.TextToSpeechClient();
const speech = new Speech();

...
Run Code Online (Sandbox Code Playgroud)

标准文本输入

console.log('Convert Article ' + data.id + ': ' + data.text);

return client.synthesizeSpeech({
        input: { text: data.text},
        voice: {
          languageCode: '[language-code]',
          name: '[language-option]',
        },
        audioConfig: {
          audioEncoding: '[encoding-type]',
          pitch: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js google-text-to-speech google-cloud-platform google-cloud-functions

5
推荐指数
1
解决办法
1857
查看次数

如何使用 Kotlin 协程为 Android 单元测试注入 viewModelScope?

问题

  1. viewModelScope使用 Kotlin 协程为 Android 单元测试注入的最佳策略是什么?

  2. 当 CoroutineScope 被注入到 ViewModel 进行单元测试时,flowOn即使在生产代码中不需要CoroutineDispatcher 也应该注入和定义 using吗?

flowOn在此用例中,生产代码中不需要,因为 RetrofitDispatchers.IOSomeRepository.kt 中处理线程,并在默认情况下viewModelScope返回数据Dispathers.Main

预期的

对保存在 Kotlin Flow 值中的 Android 的 ViewModel 视图状态值运行单元测试。

观察到的

带有主调度程序的模块未能初始化。对于测试,可以使用 kotlinx-coroutines-test 模块中的 Dispatchers.setMain

单元测试在 CoroutineScope 被硬编码的第一次出现时失败。viewModelScope被利用,以便启动的协程将维护 ViewModel 的生命周期。但是,它viewModelScope是从 ViewModel 内部创建的,与可以在 ViewModel 外部定义并作为参数传入的 CoroutineDispatcher 相比,这使得注入更加复杂。

执行

SomeViewModel.kt

fun bindIntents(view: FeedView) {
    view.initStateIntent().onEach {
        initState(view)
    }.launchIn(viewModelScope)        
}
Run Code Online (Sandbox Code Playgroud)

SomeTest.kt

@ExperimentalCoroutinesApi
class SomeTest : BeforeAllCallback, AfterAllCallback {

    private val testDispatcher = …
Run Code Online (Sandbox Code Playgroud)

junit android kotlin kotlin-coroutines kotlin-flow

5
推荐指数
1
解决办法
3385
查看次数

PagingData 是否在 Paging 3 库中默认运行在后台线程上?

后台线程是否PagingData像with一样自动管理PagedList,然后在主线程上返回?

从下面的日志中,PagingDataPagedListPaging 2 的库相比,它似乎没有在 Paging 3 库中的后台线程上运行。

期望基于Paging Codelab示例

  • GithubPagingSource override suspend fun load(...)在 IO 线程上运行。
  • SearchRepositoriesActivity viewModel.searchRepo(query).collectLatest { ... }在主线程上运行。

观察

  • 无论GithubPagingSource override suspend fun load(...)SearchRepositoriesActivity viewModel.searchRepo(query).collectLatest { ... }主线程上运行。

分页 2

螺纹是通过在背景处理PagedListtoLiveData根据文档

如果您使用 LivePagedListBuilder 获取 LiveData,它将在后台线程上为您初始化 PagedLists。

分页 3

Paging 3文档没有提到线程是如何管理的。但是,从日志中,PagingSource似乎在主线程上运行网络请求并在主线程上返回PagingData

我的示例代码

我在CryptoTweets示例应用程序 app-simple …

android kotlin android-thread android-jetpack android-paging

5
推荐指数
2
解决办法
818
查看次数

Android 视图绑定 - 多模块项目中未解析的引用

问题

加密鸣叫示例应用程序root分支器具的Android视图绑定为三个应用程序的模块,appapp-rx,和app-simple。所有三个模块都按预期运行。但是,在appapp-rx模块中, 存在 Lint 错误Unresolved reference

例如,在appapp-rx模块fragment_feed.xml中未解析,而在 中app-simple,参考显示没有导入错误。

已提交IssueTracker错误。请为该问题加注星标以提高其意识。

配置

  • 安卓工作室 4.1.1
  • Build #AI-201.8743.12.41.6953283,建于2020年11月4日
  • 运行时版本:1.8.0_242-release-1644-b3-6915495 x86_64
  • VM:JetBrains sro 的 OpenJDK 64 位服务器 VM
  • macOS 10.16
  • GC:ParNew、ConcurrentMarkSweep
  • 内存:1979M
  • 核心数:16
  • 注册表:ide.new.welcome.screen.force=true, external.system.auto.import.disabled=true
  • 非捆绑插件:com.android.tool.sizereduction.plugin、com.thoughtworks.gauge、org.jetbrains.kotlin、cn.wjdghd.unique.plugin.id、mobi.hsz.idea.gitignore、com.developerphil.adbidea , com.google.mad-scorecard

建筑学

设置.gradle

rootProject.name='CryptoTweets'
include ':app', ':app-rx', ':app-simple'
Run Code Online (Sandbox Code Playgroud)

项目导航视图

  • app: CryptoTweets > app > src > main > …

android android-fragments kotlin android-databinding android-viewbinding

5
推荐指数
1
解决办法
737
查看次数

如何在 JUnit 5 扩展中存储值并在参数化测试中注入

概述

预期- 创建一个 JUnit 5Extension类以管理TestCoroutineDispatcher.

观察到- 无法访问testDispatcherExtension类中创建的变量。

扩展实施

测试.kt


@ExtendWith(InstantExecutorExtension::class, MainCoroutineExtension::class)
class FeedLoadContentTests {
    private val contentViewModel = ContentViewModel()
    private fun FeedLoad() = feedLoadTestCases()

    @ParameterizedTest
    @MethodSource("FeedLoad")
    @ExtendWith(MainCoroutineExtension::class)
    fun `Feed Load`(test: FeedLoadContentTest) = testDispatcher.runBlockingTest {
        // Some testing done here.
    }
}
Run Code Online (Sandbox Code Playgroud)

扩展.kt

class MainCoroutineExtension : BeforeEachCallback, AfterEachCallback {
    val testDispatcher = TestCoroutineDispatcher()

    override fun beforeEach(context: ExtensionContext?) {
        Dispatchers.setMain(testDispatcher)
    }

    override fun afterEach(context: ExtensionContext?) {
        Dispatchers.resetMain()
        testDispatcher.cleanupTestCoroutines()
    }
}
Run Code Online (Sandbox Code Playgroud)

junit android kotlin android-testing junit5

4
推荐指数
1
解决办法
7636
查看次数

如何在 Kotlin Ktor 中运行 Cron 作业?

有没有办法用Ktor运行 Cron Jobs ?我的最终目标是托管一个用 Kotlin 编写的 Cron 作业,以便Coinverse 应用程序的后端服务填充数据。

我目前在 AppEngine 上托管多个用 Kotlin 编写的 Java .jar应用程序。我希望将这些应用程序重构为 AppEngine 上的 Ktor 应用程序,并使用Cron 作业来执行计划任务,因为.jar应用程序在依赖项方面存在更多问题。

我正在寻找 Ktor 相当于 Cloud Functions 的Cron Jobs with JavaScript内置实现。

functions.pubsub.schedule
Run Code Online (Sandbox Code Playgroud)

备份选项:如果 Ktor 没有此功能,并且我想将代码保留在 Kotlin 中,Google 有一个 alpha,Using Kotlin with Google Cloud Functions。看来 Kotlin + Cloud Functions 的内置实现可以与这种方法一起使用。

java google-app-engine kotlin google-cloud-functions ktor

4
推荐指数
1
解决办法
7892
查看次数