来自 Azure 数据库的 Android 移动应用查询仅返回最后一行



我的 Azure 数据库表中有超过 15 个项目称为"事件"。

我尝试运行在 上找到的大多数命令 https://learn.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-android-how-to-use-client-library 例如:

List<Events> results = eventsTable.execute().get()

List<Events> results = eventsTable.select("Events").execute().get();

List<Events> results = eventsTable.top(20).execute().get();

以返回表中的所有行项。查询似乎在表的最后一行上运行,并在执行查询时返回最后一行或根本不返回任何内容。

尽管 Azure 中的 ToDoItem 快速入门可以完美地处理所有查询 - 这很奇怪。

下面是一些代码

ArrayList<Events> events = new ArrayLists<Events>();
private void EventsFromTable() {
    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){
        @Override
        protected Void doInBackground(Void... params) {
            try {
                final List<Events> results = EventsTable.execute().get();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        for (Events event : results) {
                            Events ev = new Events(event.getName(), event.getVenue(), event.getDate());
                            events.add(ev);
                            System.out.println("size is " +events.size());
                            <======This returns "size is 1"======>
                        }
                    }
                });
            } catch (final Exception e){
                createAndShowDialogFromTask(e, "Error");
            }
            return null;
        }
    };
    runAsyncTask(task);
}

有谁知道这是怎么回事?

谢谢

根据您的代码,变量events似乎是您的 Android 应用程序中ArraryList的公共共享实例,所以我不知道是否存在多个线程同时访问它的情况。ArrayList类的实现不同步,请看这里。

因此,请使用下面的代码,而不是在 UI 线程和数据异步任务线程之间共享变量时的代码ArrayList<Events> events = new ArrayLists<Events>();

List<Events> events = Collections.synchronizedList(new ArrayLists<Events>());

我认为最好通过addAll方法复制从表中检索的数据,而不是add方法,如下代码所示。

@Override
public void run() {
    events.addAll(results);
}

最新更新