来自azure数据库的Android Mobile Apps查询仅返回最后一行

时间:2017-05-22 15:05:51

标签: azure-mobile-services

我的azure数据库表中有超过15个名为Events的项目。

我试图运行大多数命令     https://docs.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);
}

可能有人知道这件事是什么吗?

由于

1 个答案:

答案 0 :(得分:0)

根据您的代码,变量events似乎是您的Android应用中ArraryList的公共共享实例,所以我不知道是否存在多个线程访问它的情况同时。 ArrayList课程的实施未同步,请参阅here

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

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

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

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