gpt4 book ai didi

android - ViewModel 的数据由异步任务加载

转载 作者:行者123 更新时间:2023-12-05 00:16:46 26 4
gpt4 key购买 nike

当您有异步加载的数据时,我只是对 ViewModel 的想法感到困惑。

这是 ViewModel 的示例

public class UsersViewModel extends ViewModel {

private List<User> userList;

public List<User> getUserList() {
if (userList == null) {
usersList = loadUsers();
}
return userList;
}

private List<User> loadUsers() {
// This is async task
}
}

Activity :

public class UsersActivity extends AppCompatActivity {

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

UsersViewModel usersViewModel =
ViewModelProviders.of(this).get(UsersViewModel.class);

showUsers(usersViewModel.getUserList());
}
}

这将显示一个空列表(或者可能在 null 时崩溃),因为异步任务尚未完成。我在网上看到的所有示例都是同步阻塞调用。但是,如果是异步调用,将从服务器获取数据并更新 UI,情况又如何呢?我们该如何处理?

最佳答案

您可以使用实时数据来实现这一点。 ViewModel 将返回 MutableLiveData,并且在您的 View 上,您​​将订阅任何值更改。

您还可以使用数据绑定(bind),那么您 View 上的数据将自动更改。

public class NameViewModel extends ViewModel {

// Create a LiveData with a String
private MutableLiveData<String> mCurrentName;

public MutableLiveData<String> getCurrentName() {
if (mCurrentName == null) {
mCurrentName = new MutableLiveData<String>();
}
return mCurrentName;
}

// Rest of the ViewModel...
}

然后在您的 Activity 中:

public class NameActivity extends AppCompatActivity {

private NameViewModel mModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Other code to setup the activity...

// Get the ViewModel.
mModel = ViewModelProviders.of(this).get(NameViewModel.class);


// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
mNameTextView.setText(newName);
}
};

// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentName().observe(this, nameObserver);
}
}

https://developer.android.com/topic/libraries/architecture/livedata

关于android - ViewModel 的数据由异步任务加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52598754/

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