我刚刚开始使用协程,我不太确定我使用它的方式是否正确。我的android应用程序只有一个带有几个片段和对话框片段的活动。我创建了一个功能,询问用户他/她是否接受做某事。该应用程序显示了一个带有是/否按钮的DialogFragment。如果用户单击Yes,它将关闭对话框并执行作业。
我想在activity的viewModelScope中开始繁重的工作,这样当用户导航到其他片段时,它将在后台事件中继续执行。
家长的ViewModel:
class ActivityViewModel: ViewModel(){
fun doJob(){
viewModelScope.laun
我可以通过存储库类中托管的retrofit.this代码从网络接收数据:
fun getQuestionsFromWebServer() {
val webService = AppModule()
val call = webService.provideModirfaniService().getQuestions()
call.enqueue(object : Callback<List<Question>> {
override fun onResponse(
call: Cal
我已经将所有数据库表greenDao迁移到带有挂起功能的房间,应用程序在CoroutineScope调用函数时速度和性能变慢。
withContext(Dispatchers.IO)在coroutineScope(Dispatcher.Main)中运行非常慢,而runBlocking在没有协程的情况下运行很快
// This function running fast
fun getValFromDb() {
var objectOne: MyVal1 = runBlocking{ fetchFromTabelOne() }
提前谢谢你,
假设你有一个异步函数:
async def create_list(num):
print("Creating a list that is length {}".format(num))
i = 0
list = []
While True:
i += 1
if i > 100000:
await asyncio.sleep(0.0001)
list.append(i)
if i == num:
我在代码中使用回调流从Firebase数据库中检索数据。以下是我的代码 @ExperimentalCoroutinesApi
suspend fun getUserOrder() = callbackFlow<UserOrder>{
println("Current Thread name is ${Thread.currentThread().name}")
databaseReference.child("Order").addValueEventListener(object : Valu
我已经读了几十篇帖子,但不知何故,似乎没有一个答案对我有效。
我想要实现的是在片断中等待ViewModel使用Room执行操作。
Dao:
@Query("SELECT * FROM my_table WHERE id = :id")
suspend fun getMyData(id: Long): List<Item>
在ViewModel中,我不需要返回任何内容,只需使用数据库中的一些数据更新变量即可。我在这里也尝试过其他方法,比如返回一个延迟的
ViewModel:
suspend fun updateData(myItem: Item) {
for
有很多关于架构组件、kotlin和协程的信息,但我找不到一个将所有这些东西结合在一起的示例。我正在苦苦思索如何结合使用和协程来使用安卓的架构组件。我有一个想法,但我不确定这是否是实现这种架构风格的正确方式。我尝试将视图模型+存储库模式与复古拟合和协程结合使用。
我有以下存储库:
class FooRepostiroy(private val fooHttpService: FooHttpService) {
suspend fun someMethod() : SomeResult {
val response = fooHttpService.someRemotCall(
我有以下代码(伪代码) fun onMapReady()
{
//do some stuff on current thread (main thread)
//get data from server
GlobalScope.launch(Dispatchers.IO){
getDataFromServer { result->
//update UI on main thread
launch(Dispatchers.Main){
updateUI(resu
当播放器触发触发器时,我需要停止在另一个脚本中运行的协程。触发器起作用了,但是协程不会停止。 下面是运行协程的脚本: public AudioSource direction;
public IEnumerator audioPlayCoroutine;
public bool running = false;
IEnumerator AudioPlay()
{
while (true)
{
direction.Play();
yield return new WaitForSeconds(2);
}
}
void OnT
我在CM中使用View Model first方法,其中我创建了一个ViewModel,并在创建之后立即激活它。在ViewModel的构造函数中,我使用以下方法启动了一个协程:
Coroutine.BeginExecute(Example().GetEnumerator());
我的视图中有一个繁忙指示器,并且我将busy属性(即绑定到busy indicator控件上的IsBusy属性的TwoWay )设置为true。当为true时,指示器显示;当为false时,它是隐藏的。
所以我的协程看起来像这样:
IsBusy = true;
var example = client.AsyncOp(
我在使用RoomDatabase实现搜索功能时遇到了问题。
我最近实现了搜索功能的改进,它是好的,没有问题。
但是,在没有互联网的情况下,如果用户想要在产品之间进行搜索,会给出一个错误,这与没有连接到互联网有关。
因此,我决定用room实现搜索功能,并尝试了很多代码,但没有得到合适的结果。填充编辑文本并单击按钮后,将返回按标题打印而不是返回结果。
下面是我尝试过的一些代码:
房间表实体:
@entity(tableName = cart )
class RoomTables {
@primarykey
val id : Int ,
val title : String
}
Dao
因为我有多个可以触发快餐栏的地方,所以我想在我的应用程序中有一个中心位置,在那里我可以处理显示/取消快餐栏。
这是我的应用程序的结构:
我已经实现了一个包含StateFlow的BaseViewModel,它应该跟踪SnackBar消息(每个其他ViewModel都从这个BaseViewModel继承):
@HiltViewModel
open class BaseViewModel @Inject constructor() : ViewModel() {
val _snackBarMessage = MutableStateFlow("")
val
这是关于runBlocking的错误用法吗?正如"runBlocking“docs所说的那样,This function should not be used from coroutine。
这段代码摘自库。
fun start(facing: CameraFacing) {
GlobalScope.launch(cameraDispatcher) {
runBlocking {
lifecycleState = LifecycleState.STARTED
cameraFa