【问题标题】:How to make a ListView from a Specific List<ParseUser>?如何从特定 List<ParseUser> 制作 ListView?
【发布时间】:2016-01-14 17:46:51
【问题描述】:

我正在尝试从包含 ParseUser 的列表中创建一个列表视图。 我的搜索类返回:列表 Parse SDK 1.12 不再支持 ParseQueryAdapter 并且配置文件适配器功能不使用 ParseUser。

我尝试从 _User 解析类中查询 ParseObjects,但它不会返回对象。

所以我在 circels 工作,如果我尝试在 ParseObject 中获取用户信息,我不会得到它。如果我与 ParseUser 一起工作,我无法制作 ListView。有人知道绕过它的方法吗?

我已经检查了这些问题。

ParseUser Username Adapter in Android ListView doesn't show Data

How to fetch the list of users from ParseUser table and show the it in list view in andorid

但它不适用于指定的用户列表。

这是我的代码。

Java:

public class MainActivity extends ActionBarActivity {

    Search search;
    EditText mCityField;
    List<ParseUser> mAccountList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ParseAnalytics.trackAppOpenedInBackground(getIntent());

        mCityField = (EditText)findViewById(R.id.mCityField);
    }

    public void searchCity(View v){
        if(mCityField.getText().toString().length()!=0){
            mAccountList = search.searchUsers(mCityField.getText().toString());
            Log.i("main", "succesfully searched yo mamma");
        } else{
            Toast.makeText(MainActivity.this, "You did not enter a city!", Toast.LENGTH_SHORT).show();
        }
    }

这是我的搜索类:

public class Search {
    List<ParseUser> locals = null;

    public List<ParseUser> searchUsers(String city){
        ParseQuery<ParseUser> query = ParseUser.getQuery();
        query.whereEqualTo("City", city);
        query.findInBackground(new FindCallback<ParseUser>() {
            public void done(List<ParseUser> userList, ParseException e) {
                if (e == null) {
                    Log.i("main", "inside if loop" + userList);

                    for (ParseUser user : userList) {
                        Log.i("main", "inside for loop");
                        String username = user.getString("username");
                        Log.i("main", "username " + username);
                    }
                    locals = userList;
                } else {
                    Log.d("score", "Error: " + e.getMessage());
                }
            }
        });
        return locals;
    }
}

适配器类:

public class ProfileAdapter extends ParseQueryAdapter<ParseObject> {
    public ProfileAdapter(Context context, QueryFactory<ParseObject> queryFactory) {
        super(context, queryFactory);
    }
    @Override
    public View getItemView(final ParseUser user, View v, ViewGroup parent) {
        // build your views
    }
}

【问题讨论】:

  • 你真的需要一个完整的类来使用searchUsers 方法吗?你不能在 Activity 中包含那个方法吗?
  • 不需要,但我想将查询与我的主要活动分开。
  • 当然,当然...您的代码中的ListView 在哪里?我不知道,或者您在哪里初始化适配器。此外,query.findInBackground异步运行,因此return locals 在评估时很可能是null
  • 你真的应该遵循这个例子。 parse.com/tutorials/parse-query-adapter
  • 但是不再可能将 ParseQueryAdapter 扩展为子类。是否有另一种方法或另一个子类给出相同的结果?

标签: android parse-platform android-listview


【解决方案1】:

这里的问题是您使用的是异步方法query.findInBackground 其中done 方法只会在异步调用返回后被调用。在这种情况发生之前,您的 locals List 将保持为空,并且当您在同步方法中立即返回它时,您只是从您的 searchUsers 方法返回一个空列表。

调用 done 块中的方法,该方法创建一个新的 ProfileAdapter 并将其设置为您的 ListView 的适配器,或者更好的是,在创建视图时使用适配器初始化 ListView 并添加方法来更新适配器上的数据集,然后在您的适配器上调用notifyDatasetChanged,瞧,它会将结果添加到您的 ListView。

类似:

public class ProfileAdapter extends ParseQueryAdapter<ParseObject> {

private List<ParseUser> mUserList;

public ProfileAdapter(Context context, QueryFactory<ParseObject> queryFactory) {
super(context, queryFactory);
}

@Override
public View getItemView(final ParseUser user, View v, ViewGroup parent) {
// build your views
}

public void setData(List<ParseUser>  userList) {
    mUserList = userList;
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return mUserList.size();
}

通过done 回调方法在适配器上调用此setData 方法。这将在您的适配器中设置返回的数据并通知它有新数据要显示。还要记得在 Activity 中将适配器设置为 ListView 的适配器。

【讨论】:

  • 理想情况下,queryFactory 变量应该获取列表,而不需要在事后传入列表。
  • 但问题是最新的 Parse SDK 1.12 不再支持 ParseQueryAdapter。所以我正在努力寻找替代方案
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多