我正在使用 Back4App,它基本上就是旧的 parse.com 曾经的样子。我有这段代码,其中 done 方法我的公共(public)列表有 5 个元素,就像它应该有的那样。然后一旦我退出我的方法,列表就为空。
ParseQuery<settings> query = ParseQuery.getQuery(settings.class);
query.whereEqualTo("Username", MainActivity.Display_Name);
query.orderByDescending("createdAt").setLimit(1);
query.findInBackground(new FindCallback<settings>() {
public void done(List<settings> settingsList, ParseException exception) {
for (settings i : settingsList) {
if (exception == null) {
creationDate = i.getCreatedAt();
settingsFrameNumber = i.getFramesPerHive();
settingsArray.add(0, String.valueOf(settingsFrameNumber));
settingsHiveNumber = i.getHiveNumber();
settingsArray.add(0, String.valueOf(settingsHiveNumber));
settingsHiveBodyNumber = i.getHiveBodies();
settingsArray.add(0, String.valueOf(settingsHiveBodyNumber));
settingsSuperNumber = i.getSupers();
settingsArray.add(0, String.valueOf(settingsSuperNumber));
settingsYearsOfBeekeeping = i.getYearsofBeekeeping();
settingsArray.add(0, String.valueOf(settingsYearsOfBeekeeping));
settingsLocation = i.getLocation();
settingsArray.add(0, settingsLocation);
Log.e("Pay Attention", settingsArray.toString());
}
}
}
});
Log.e("Pay Attention", settingsArray.toString());
return settingsArray;
第一个 Log 语句返回:[Littleton, 5, 4, 3, 1, 2]
第二条日志语句返回:[]
我在类(class)的前面创建了列表,因此它不仅仅是 done 方法的本地内容。
public static List<String> settingsArray = new ArrayList<String>();
最佳答案
once I get out of my method the list is empty.
就是这样,您没有“退出”该方法——它还没有被输入。
基本上,如果您试图返回正在等待的数据,则不应从异步方法返回。
如果您想正确返回该列表,要么
通过
new FindCallback<settings>()
作为该方法的参数,并将其提供给findInBackground
定义您自己的回调接口(interface),它可以从
done
中发回数据。方法。
在这两种情况下,您都可以使用 void
方法.
例如,选项 1。(我将其设置为静态的,因为似乎不需要包含该方法的类的任何实例)
public static void doStuff(String displayName, FindCallback<settings> callback)
ParseQuery<settings> query = ParseQuery.getQuery(settings.class);
query.whereEqualTo("Username", displayName);
query.orderByDescending("createdAt").setLimit(1);
query.findInBackground(callback);
}
就是这样。
你这样调用它,从任何地方,显然取代了 ApiService
使用您的实际类(class)名称。
private List<settings> settings;
private void setupList(List<settings> settings) {
Log.d("SETTINGS", String.valueOf(settings)); // Shouldn't be empty
this.settings = settings;
/* Use the list however you want to... */
// adapter = new ArrayAdapter(MainActivity.this, settings);
// listView.setAdapter(adapter);
}
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.some_example);
ApiService.doStuff(MainActivity.Display_Name, new FindCallback<settings>() {
public void done(List<settings> settingsList, ParseException exception) {
if (exception == null) {
...
// Update the UI here
setupList(settingList);
}
}
});
}
关于android - 在方法中我的列表有元素,但是当我出来时列表是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103334/