我的 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);
}