- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我收到以下错误
我正在使用 Android 架构组件并尝试实例化 View 模型并从 LiveData 观察数据。但我被困在这里请帮我解决这个问题:
Attempt to invoke virtual method 'void android.arch.lifecycle.LiveData.observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' on a null object reference
我的 fragment 是这样的:在调用 getCompany() 方法时我得到了 NullPoint Exception Error
public class CompanyFragment extends LifecycleFragment {
private CompanyViewModel companyViewModel;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
companyViewModel = ViewModelProviders.of(this).get(CompanyViewModel.class);
companyViewModel.initData();
companyViewModel.getCompany().observe(this, new Observer<CompanyEntity>() {
@Override
public void onChanged(@Nullable CompanyEntity companyEntity) {
}
});
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_company, container, false);
}
}
我的 ViewModel 类是这样的:
public class CompanyViewModel extends ViewModel {
private LiveData<CompanyEntity> companyEntityLiveData;
private CompanyRepository companyRepo;
public CompanyViewModel() {}
public CompanyViewModel(CompanyRepository companyRepo){
this.companyRepo = companyRepo;
}
public void initData(){
companyEntityLiveData = companyRepo.getCompany();
}
public LiveData<CompanyEntity> getCompany() {
return companyEntityLiveData;
}
}
错误在这一行:
companyViewModel.getCompany().observe(this, new Observer<CompanyEntity>() {
@Override
public void onChanged(@Nullable CompanyEntity companyEntity) {
}
});
这是我的 CompanyRepository 类:
public class CompanyRepository {
private WebService webService;
public CompanyRepository(){
}
public LiveData<CompanyEntity> getCompany() {
final MutableLiveData<CompanyEntity> data = new MutableLiveData<>();
webService.getCompany().enqueue(new Callback<CompanyEntity>() {
@Override
public void onResponse(Call<CompanyEntity> call, Response<CompanyEntity> response) {
data.setValue(response.body());
}
@Override
public void onFailure(Call<CompanyEntity> call, Throwable t) {
}
});
return data;
}
}
最佳答案
您必须观察您的 LiveData 的同一个实例。在您的 CompanyRepository
类中,您每次访问公司时都会创建一个新的 LiveData 实例,这意味着您的 Activity 随后会观察一个旧实例。
getCompany 方法应该更改为始终返回相同的 LiveData 实例。此外,您应该将 setValue() 更改为 postValue(),因为您正在尝试更新后台线程上的值。
final MutableLiveData<CompanyEntity> data = new MutableLiveData<>();
public LiveData<CompanyEntity> getCompany() {
webService.getCompany().enqueue(new Callback<CompanyEntity>() {
@Override
public void onResponse(Call<CompanyEntity> call, Response<CompanyEntity> response) {
data.postValue(response.body());
}
@Override
public void onFailure(Call<CompanyEntity> call, Throwable t) {
}
});
return data;
}
关于android - 尝试在空对象引用上调用虚方法 'void android.arch.lifecycle.LiveData.observe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44986686/
我在使用的教程中遇到了这个不寻常的代码。 #if !(arch(x86_64) || arch(arm64)) func sqrt(a: CGFloat) -> CGFloat { return CG
我的应用程序需要 double 计算。根据我在谷歌上找到的内容,我应该添加一个标志“-arch sm_13”或“-arch sm_20”。 Q1:“-arch sm_13”和“-arch sm_20”
在从不同的规范文件构建一些 RPM 时,我收到了上述警告 Binaries arch (1) not matching the package arch (2). 代码和一切都给了我,我对 RPM 很
似乎 Microsoft Visual C++ 提供了可在两种名称格式下重新分发的 VC++ 运行时的等效副本。 VS2017: @ /cygdrive/c/Program Files (x86)/M
在 Kotlin 文件中,我有一个“未解析的引用:arch”。 import android.arch.lifecycle.Lifecycle import android.arch.lifecycl
目前,我们正在项目中使用LiveData、ViewModel 和Room。 我们正在使用 Java 8。 我们在build.gradle中使用以下内容 // ViewModel and LiveDat
我在 Macbook Pro 上的 VirtualBox 上运行 Ubuntu 14.04 64 位 MAC。我在 hello_kernel.c 中有以下内容,我想运行它。 #include #in
我创建了一个 github 操作来在推送时部署代码。 安装软件包时会导致此错误。 Run npm i --no-optional && cd client && npm i --no-optional
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 之后发生以下错误并尝试制作内核: $ sudo make make[1]: *** No rule to make targ
测试二进制 二进制没问题 npm WARN rollback 回滚 node-pre-gyp@0.12.0 失败(这可能是无害的): EPERM: operation not permitted, l
当我尝试在 Ubuntu 机器中启用 PPP 时,在 menuconfig 和尝试制作内核之后发生了以下错误: $ sudo make make[1]: *** No rule to make tar
我正在尝试安装Webpack但它不断地给我同样的警告,而且 webpack 仍然没有安装在我的项目中。这是我正在处理的一个现有项目。我尝试了很多命令,例如 npm install --no-optio
我在我的raspberry pi上安装python密码软件包时遇到了一些问题,特别是python版本3.9.8(与pyenv一起安装)。密码包是使用pacman(python-cryptography
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章Arch Linux安装后的一些初始设置简介由作者收集整理,如果你对这篇
我尝试在 ubuntu 12.04(64 位)上构建 gcc 4.8 主干。 当我使用配置时 ../gcc-trunk/configure -v --with-pkgversion='ubuntu12
slock 与 xfce 一起安装。 当我点击右上角的“锁定屏幕”时,屏幕变黑。按任意键,屏幕会变红,但如何取消呢? slock中没有解锁的UI? 最佳答案 我发现它只是在等待密码。输入正确的密码,屏
我正在尝试在 Cygwin 中为 Android NDK 配置工具链。我用这个tutorial .当我运行以下命令时: ./make-standalone-toolchain.sh --platfor
我安装了 Arch Arm到 Rpi3 上,然后将 sysroot rsync 到安装在 Lenovo thinkpad 上的 x86_64 Arch Linux。 然后我安装了 arm-linux-
我正在研究 Linux 内核模块。它需要有一种方法可以将所有进程显示为分层树。我已经编写了一个递归方法来显示进程及其子进程。我还尝试通过检查每个进程与 init_task 的距离来将其格式化为树。但是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!