为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确解析数据或使用会议室数据?

如何正确解析数据或使用会议室数据?

繁星coding 2022-09-07 21:15:26
我是房间数据库的新手,但在过去的1.5周里一直在研究它。我最近遇到了一个问题。我无法解析旅程列表的大小。当我尝试时,即使我使用全局变量,它也总是返回0。我相信,这是由于覆盖方法。我正在尝试获取变量。有什么办法可以解决这个问题吗?这也是在一个片段中。numberOfJourneys = journeys.sizeprivate JourneyDatabase db;private List<Journey> journeys;private int numberOfjourneys; public void arrayAdapter(){    db = Room.databaseBuilder(getContext(), JourneyDatabase.class, "MyJourneyDatabase").build();    AsyncTask.execute(new Runnable() {        @Override        public void run() {            journeys = db.journeyDao().getAllJourneys();            // journeys.size returns the correct size all the time        }    });    numberOfJourneys = journeys.size();    // journeys.size() returns 0 all the time    for(int i=0; i<numberOfJourneys; i++){        listOfJourneys.add(String.format("Journey %d", i));    } }
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

将在单独的线程上执行。您的代码将执行 AsyncTask,并将立即进入循环,而不管 AsyncTask 是否完成其执行。我将提到一些你可以处理这个问题的方法。AsyncTaskfor

方法 1:您可以将循环移动到 AsyncTask 本身内部。这将确保 for 循环在从 db 获取数据后执行。for

方法 2:允许在 UI 线程上运行此查询。AFAIK,如果明确提及,则房间允许在UI线程上运行查询。

方法 3:使用回调。在 AsyncTask 完成后,您可以使用回调(使用接口实现),这将使您的活动/片段知道 AsyncTask 已完成,您可以继续工作。


查看完整回答
反对 回复 2022-09-07
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

顾名思义,正在异步执行 ...这正是返回那里的原因 - 因为你从来没有分配过记录。AsyncTaskjourneys.size()0


AsyncTask.execute(new Runnable() {

    @Override

    public void run() {


        /* first retrieve the data */

        journeys = db.journeyDao().getAllJourneys();

        for(int i = 0; i < journeys.size(); i++){

           listOfJourneys.add(String.format("Journey %d", i));

        }


        /* and then notify the adapter */

        arrayAdapter.notifyDataSetChanged();   

    }

});

请参阅文档。


查看完整回答
反对 回复 2022-09-07
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信