gpt4 book ai didi

android - 从 DAO 方法返回值的空指针异常

转载 作者:行者123 更新时间:2023-12-04 08:34:13 27 4
gpt4 key购买 nike

我正在使用 Roomdatabase,我希望在给定名称时从数据库中搜索单个对象。为此,我在 DAO 中编写了此查询:

 @Query("SELECT * FROM kuh_table WHERE name = :kuhName ")
Kuh findKuh(String kuhName);
我以这种方式在存储库中调用它:
public Kuh findKuh(String kuhName){
final Kuh[] kuh = new Kuh[1];
new Thread(new Runnable() {
volatile boolean running = true;
@Override
public void run() {
if(running!= true) {
return;
}
kuh[0] =kuhDAO.findKuh(kuhName);
running = false;
}
}).start();
return kuh[0];
}
然后以这种方式在我的 ViewModel 中:
public Kuh findKuh(String kuhName){ return repository.findKuh(kuhName);}
然后我在一个 fragment 中初始化我的 ViewModel 并尝试通过提供这样的字符串来使用该方法:
MarkerApiKt.setMarkerTapListener(mapView, (MarkerTapListener) (new MarkerTapListener() {
public void onMarkerTap(@NotNull View view, int x, int y) {
Intrinsics.checkNotNullParameter(view, "view");
if (view instanceof MapMarker) {
MarkerCallout callout = new MarkerCallout(context);
callout.setTitle(((MapMarker) view).getName());
callout.setSubTitle("position: " + ((MapMarker) view).getX() + " , " + ((MapMarker) view).getY());
Kuh kuh = kuhViewModel.findKuh(((MapMarker) view).getName());
Toast.makeText(context, "this is "+ kuh.getName(), Toast.LENGTH_SHORT).show();
但不知何故,我的对象的 istance 始终为空,因为我最终遇到了空指针异常。
知道我可能做错了什么吗?

最佳答案

所以,正如@Olli 所说,问题是我的存储库中的线程没有完成它的执行,这就是它返回一个空对象的原因。
我只是以这种方式更改了我的代码,现在它可以正常工作

public Kuh findKuh(String kuhName) throws InterruptedException {
final Kuh[] kuh = new Kuh[1];
Thread t1 = new Thread(new Runnable() {
volatile boolean running = true;
@Override
public void run() {
if(running!= true) {
return;
}
kuh[0] =kuhDAO.findKuh(kuhName);
running = false;
}
});
t1.start();
t1.join();
return kuh[0];
}

关于android - 从 DAO 方法返回值的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64874565/

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