安卓设置一个mmvm请求不到数据就一直请求,直到请求成功的代码
时间: 2024-02-24 14:55:19 浏览: 30
在 Android 中,可以使用 MVVM 架构来实现数据的请求和展示。在 MVVM 架构中,ViewModel 负责管理数据的请求和更新,View 负责展示数据,Model 则是数据源。
要实现请求不到数据就一直请求的功能,可以在 ViewModel 中使用循环来发送请求并等待响应。具体来说,可以使用一个 `while` 循环,在循环体中发送请求并等待响应,如果响应成功则更新数据,否则继续循环发送请求。
以下是一个简单的示例代码:
```java
public class MyViewModel extends ViewModel {
private MutableLiveData<String> mData;
public LiveData<String> getData() {
if (mData == null) {
mData = new MutableLiveData<>();
loadData();
}
return mData;
}
private void loadData() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
// 发送请求并等待响应
String response = sendRequest();
// 判断响应是否成功
if (isResponseSuccessful(response)) {
// 响应成功,更新数据
mData.postValue(response);
break;
}
// 响应失败,等待 1 秒后再发送请求
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
private String sendRequest() {
// 发送请求并返回响应
return "";
}
private boolean isResponseSuccessful(String response) {
// 判断响应是否成功
return true;
}
}
```
在上面的代码中,`MyViewModel` 是一个继承自 `ViewModel` 的自定义 ViewModel,`getData()` 方法返回一个 LiveData,用于在 View 中观察数据的变化。在 `loadData()` 方法中使用一个新线程来执行循环发送请求的逻辑,`sendRequest()` 方法用于发送请求并返回响应,`isResponseSuccessful()` 方法用于判断响应是否成功。如果响应成功则调用 `mData.postValue(response)` 更新数据,否则等待 1 秒后再发送请求。
需要注意的是,如果使用循环发送请求,会导致线程一直处于阻塞状态,可能会影响应用的性能和响应速度。因此,在实际开发中需要根据具体情况进行权衡和优化。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)