gpt4 book ai didi

android - 使用 SyncAdapter/不同线程更新时,LiveData 不会观察到变化

转载 作者:行者123 更新时间:2023-12-04 23:57:46 25 4
gpt4 key购买 nike

我有一个插入消息的 SyncAdapter:

public class SyncAdapter extends AbstractThreadedSyncAdapter {
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
messageDAO.insert(..);
}
}

我有一个显示这些消息的过滤部分的 Activity :

    protected Observer<List<MessageEntity>> messageOberserver;

@Override
protected void onCreate(Bundle savedInstanceState) {
this.messageOberserver = new Observer<List<MessageEntity>>() {
@Override
public void onChanged(List<MessageEntity> messages) {
Log.v("tmp", "messages have changed");
messageAdapter.setData(messages);
}
}

MessageViewModel messageViewModel = ViewModelProviders.of(this).get(MessageViewModel.class);
messageDAO.findMessagesForTopic(this.topicId).observe(this, this.messageOberserver);
}
DAO:
@Query("SELECT * FROM Message WHERE messageTopicId = :topicId")
LiveData<List<MessageEntity>> messageDAO.findMessagesForTopic(String topicId);

现在的问题是观察者无法识别消息表的变化。如果我重新打开 Activity ,则会显示更改。 SyncAdapter 告诉 Activity 它应该检查更改的正确方法是什么?我读到了 postValue(),但我不知道如何使用它。 SyncAdapter 不知道 Activity 显示的部分 Message 数据。

--

顺便说一句。如果我从其他地方更新(不是 SyncAdapter),代码就可以工作。

最佳答案

这可能是在另一个进程中运行您的同步适配器的结果,同步适配器服务文档默认情况下会指示该进程。尝试从 AndroidManifest.xml 中的服务中删除 android:process=":sync 或类似行。这将在与您的应用程序 Activity 相同的进程中运行同步适配器。

关于android - 使用 SyncAdapter/不同线程更新时,LiveData 不会观察到变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com