我的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);
}
可能有人知道这件事是什么吗?
由于
答案 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);
}