Android,循环遍历Parse数据,分配给ArrayAdapter

时间:2015-04-24 19:43:45

标签: android parse-platform

我使用Parse数据循环遍历Android中的数据。我想出了这个作为获取用户信息的方法;更大的目标是创建一个我可以在数组适配器中使用的数据模型,因此我可以创建一个自定义列表视图(如所描述的here)在该示例中,数据是硬编码的,而不是从数据库。

public static ArrayList<Midwifefirm> getUsers() {

    //Parse data to get users
    ParseQuery<ParseUser> query = ParseUser.getQuery();

    query.orderByAscending(ParseConstants.KEY_PRACTICE_NAME);

    query.findInBackground(new FindCallback<ParseUser>() {
        @Override
        public void done(List<ParseUser> users, ParseException e) {

            if (e == null) {

                final List<ParseUser> mMidwives;
                mMidwives = users;

                String usertype;

                String[] midwives = new String[mMidwives.size()];
                String[] yearsofexperience = new String[mMidwives.size()];
                String[] education = new String[mMidwives.size()];
                String[] philosophy = new String[mMidwives.size()];

                int i = 0;
                for (ParseUser user : mMidwives) {

                    usertype = user.getString("userType");

                    if (!Arrays.asList(midwives).contains(usertype) && usertype != "patient") {

                        midwives[i] = user.getString("practicename");
                        yearsofexperience[i] = user.getString("yearsofexperience");
                        education[i] = user.getString("education");
                        philosophy[i] = user.getString("practicephilosophy");

                        ArrayList<Midwifefirm> midwifefirm = new ArrayList<Midwifefirm>();
                        midwifefirm.add(new Midwifefirm(midwives[i], yearsofexperience[i], education[i], philosophy[i]));

                        return midwifefirm;
                    }
                }
            }
        }
    });
}

目的是为每个没有患者类型的用户收集有关他们的数据,然后将其存储在arrayList中。

但是在return语句中,出现错误:cannot return a value from a method with a void return type.

我可能会使这个过于复杂...通过各种来源阅读以获得此模型...最后,我想在用户选择城市后显示有关特定用户的信息列表......因此,它会显示有关该城市医疗实践的所有信息。

感谢您的帮助

迈克尔

1 个答案:

答案 0 :(得分:1)

代码甚至不会以您发送的形式编译。

使用findInBackground时进行异步调用。这意味着调用它的代码将在调用它之后继续执行。它不会等待它完成,它不再关心它了。

处理此类代码的正确方法是编写所需的逻辑并操纵回调中的结果。因此,我们更改的第一件事是getUsersvoid的返回类型。

现在getUsers只是说:“好的,请在后台找到这个,我会让你在done()中做你的事。”

public static void getUsers() {

    //Parse data to get users
    ParseQuery<ParseUser> query = ParseUser.getQuery();

    query.orderByAscending(ParseConstants.KEY_PRACTICE_NAME);

    query.findInBackground(new FindCallback<ParseUser>() {
        @Override
        public void done(List<ParseUser> users, ParseException e) {

            if (e == null) {
                // here you manipulate your list. you set up your data structures 
                // or whatever and call other methods from your `Activity` or whatever, 
                // passing the data as parameter
            }
        }
    });
}

您需要更新调用getUsers的代码并需要用户列表,因为如您所见,它无法立即获得结果。您可以在done中移动部分代码。

LE:您可能还想从方法中删除static修饰符。