这个问题表示,虽然LiveData对象包含值,但将其赋值给变量时却为null。这可能是由于异步加载数据的延迟导致的。解决办法是使用Android架构组件中的Observer模式,当LiveData对象的值改变时通知观察者更新UI,而不是直接将其赋值给变量。以下是代码示例:
public class MyFragment extends Fragment {
private ViewModel mViewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewModel = new ViewModelProvider(this).get(ViewModel.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
TextView textView = view.findViewById(R.id.text_view);
mViewModel.getLiveData().observe(getViewLifecycleOwner(), new Observer() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return view;
}
public class ViewModel extends AndroidViewModel {
private MutableLiveData mLiveData;
public ViewModel(@NonNull Application application) {
super(application);
mLiveData = new MutableLiveData<>();
loadData();
}
public LiveData getLiveData() {
return mLiveData;
}
private void loadData() {
// 异步加载数据
new Thread(new Runnable() {
@Override
public void run() {
// 模拟数据加载
SystemClock.sleep(2000);
mLiveData.postValue("Hello, World!");
}
}).start();
}
}
}