android - 在方法中我的列表有元素,但是当我出来时列表是空的

标签 android parse-platform

我正在使用 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.

就是这样,您没有“退出”该方法——它还没有被输入。

基本上,如果您试图返回正在等待的数据,则不应从异步方法返回。

如果您想正确返回该列表,要么

  1. 通过new FindCallback<settings>()作为该方法的参数,并将其提供给 findInBackground

  2. 定义您自己的回调接口(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/

相关文章:

android - 我是否需要使用自己的公司名称才能显示应用程序?

ios - 检查用户是否有效 Parse (Swift)

javascript - 解析文件在 textView Android 中显示随机字母数字文本

javascript - 一对多关系的简单解析查询

Android sqlite 选择不工作

android - ExpandableListView onExpand 总是将展开的组滚动到顶部

安卓应用打包

Android RoleManager删除自己包的角色RoleManager.ROLE_SMS

iOS 9 Parse (v 1.8.5) Facebook (v 4.6) FBSDKInternalUtility checkRegisteredCanOpenURLScheme 登录崩溃

swift - 解析查询返回零?