【问题标题】:Null Object reference on room DAO returned object房间 DAO 返回的对象上的空对象引用
【发布时间】:2020-09-08 06:19:45
【问题描述】:

我在理解为什么会出现空对象异常时遇到问题。

我对 DAO 的调用是在 onCreate 中:

  AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                WDatabase wdatabase = WDatabase.getInstance(MyApplication.getAppContext());
                NDao nDao = wDatabase.nDao();
                MNode mNode = new MNode();
                mNode = nDao.getMNodeByID(516);
                Log.d("NTest", "nData: "+mNode.getNID());
            }
        });

我的DAO中的方法是

//Get by id
    @Query("SELECT * FROM MNode WHERE nodeID= :nodeID")
    MNode getMNodeByID(int nodeID);

在我的模型中,变量是 int nodeID

返回空指针我做错了什么?数据库存在,节点是否存在于数据库中?但我仍然得到空对象?

【问题讨论】:

  • 你能打印错误日志吗?检查“nDao”数据访问对象是否为空。检查您是否能够访问 asyncTask 中的 dao
  • 不,我没有使用弹簧
  • nDao 打印,不为空
  • 它现在正在工作,除了 Dao 返回一个 int 然后将其改回以再次返回我的 MNode 之外,我似乎没有更改任何其他内容?我将检查并查看发生了什么变化并发布答案。感谢您的所有帮助
  • 发布您的堆栈跟踪

标签: java android android-room dao


【解决方案1】:

你必须这样写查询

@Query("SELECT * FROM MNode WHERE nodeID= :nodeID")
int getMNodeByID(int nodeID);

它将返回您所需查询的 id

【讨论】:

  • 感谢您的帮助,我认为获取 MNode 方法需要返回一个 MNode?如何使用返回的 int?
  • 我可以看看你的代码你是如何在你的代码中使用getNodeByID方法的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多