Java - 等待异步响应而不阻塞

时间:2021-03-05 17:05:09

标签: java android httprequest android-viewmodel

首先让我声明我是 Java 和 Android 连接方面的新手,所以请耐心等待。

我正在创建一个 android 应用程序,这个应用程序应该检索数据,然后将该数据存储在一个 LiveData 对象中,以便通知观察者。然而,在将实际请求功能与我的 ViewModel 分开的同时,我在实际创建让它工作时遇到了困难。当我查看 android 开发人员指南时,我看到他们使用某种类型的存储库,它只返回数据对象,没有任何形式的回调。我不太确定这将如何运作。

我目前的工作:

public class SomeViewModel extends ViewModel {
    private MutableLiveData<String> data;
    
    public SomeViewModel() {
        data = new MutableLiveData();

        someRequestMethod(
            "https://www.google.com/",
            successResponseString -> {
                data.setValue(successResponseString);
            },
            errorResponse -> {
            }
        );
    }
}

举例说明:

public class SomeViewModel extends ViewModel {
    private MutableLiveData<String> data;
    private GoogleRepository injectedGoogleRepository;
    
    public SomeViewModel() {
        data = new MutableLiveData();
        data.setValue(injectedGoogleRepository.someRequestMethod());
    }
}

现在我可以理解在回调内部传递 LiveData,以便存储库使用响应执行该回调。例如。像这样:

injectedGoogleRepository.someRequestMethod(successResponseString -> data.setValue(successResponseString));

在我开始研究如何在 android 中创建 web 服务和存储库之前,这是我的想象。从功能上讲,解决方案之间不应存在巨大差异,假设示例在等待响应时不阻塞线程。我是否正确地假设没有办法在不实际阻塞 ViewModel 正在运行的线程的情况下实现示例代码?由于我在这方面缺乏经验,我想知道我是否遗漏了什么。

感谢阅读。

0 个答案:

没有答案