使用来自Parse.com(Android)的数据填充String []数组

时间:2015-12-15 05:06:12

标签: java android arrays parse-platform autocompletetextview

我设置了以下数组适配器:

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, USERS);
    AutoCompleteTextView textView = (AutoCompleteTextView)
            findViewById(R.id.searchUserTextField);
    textView.setAdapter(adapter);

对于以下String []数组:

private static final String[] USERS = new String[] {
        "user1", "user2", "user3", "user4", "user5"
};

以下是我searchUserTextField的XML。只是一个典型的AutoCompleteTextView

<AutoCompleteTextView
            android:layout_width="match_parent"
            android:layout_height="65dp"
            android:background="@drawable/edittext_border"
            android:layout_gravity="top"
            android:textColor="#000000"
            android:hint="@string/search_user"
            android:id="@+id/searchUserTextField"
            android:ems="150"
            android:paddingLeft="25dp"
            android:paddingTop="10dp"
            android:paddingRight="10dp"
            android:paddingBottom="10dp"
            android:maxLines ="4"
            android:maxLength ="150"
            android:scrollHorizontally="false"
            android:typeface="sans"
            android:textSize="14sp"
            android:fontFamily="sans-serif-light"
            android:capitalize="none"
            android:inputType="textEmailAddress"
            android:gravity="center_vertical"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_toLeftOf="@+id/submitSearch"
            android:layout_toStartOf="@+id/submitSearch" />

到目前为止,这是一个非常简单的实现。

我想知道,如何在Parse中从我的User类中检索的数据中填充我的USERS数组?基本上,用例如下:

1)用户输入AutoCompleteTextView

2)根据我的Parse.com用户类中的可用用户名弹出建议,

3)用户选择名称并搜索用户。

我意识到这可能不是我正在尝试完成的正确或高级实现,但我只是想在婴儿步骤中解决这个问题,因为我是Android的新手。 / p>

我的问题基本上归结为,我如何根据对USERS的输入动态填充AutoCompleteTextView数组与Parse中的用户列表?

答案更新:我在我的申请中使用了以下内容。我必须将this设置为getApplicationContext(),以便ArrayAdapter正确构建我的自定义strings数组。回答的问题转到下面的用户 hack_on ,但我必须更改我的ArrayAdapter的上下文才能使其适用于我的目的。

    ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
    userQuery.findInBackground(new FindCallback<ParseUser>() {
        public void done(List<ParseUser> parseUsers, ParseException e) {
            if (e == null) {
                Log.d("users", "Retrieved " + parseUsers.size());
                ParseUser[] data = parseUsers.toArray(new ParseUser[parseUsers.size()]);
                String[] strings = new String[data.length];
                for (int i = 0; i < data.length; i++) {
                    strings[i] = data[i].getString(ParseConstants.KEY_USERNAME);
                }
                // Test to see if it was correctly printing out the array I wanted.
                // System.out.println(Arrays.toString(strings));
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, strings);
                AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.searchUserTextField);
                if(parseUsers.size() < 40) textView.setThreshold(1);
                else textView.setThreshold(2);
                textView.setAdapter(adapter);
            } else {
                Log.d("users", "Error: " + e.getMessage());
            }
        }
    });

2 个答案:

答案 0 :(得分:1)

此问题的一个(未接受的)答案:Dynamically updating an AutoCompleteTextView adapter显示如何使用适配器中的过滤器动态更新建议。你必须实现&#34; autocomplete()&#34;方法,在你的情况下从Parse返回结果。

编辑:通过动态填充,操作系统要求在显示列表之前运行查询,而不是响应用户在列表中键入内容。

UILabel

答案 1 :(得分:0)

我不能做这样的事吗?

            ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
    userQuery.findInBackground(new FindCallback<ParseUser>() {
        public void done(List<ParseUser> parseUsers, ParseException e) {
            if (e == null) {
                Log.d("score", "Retrieved " + parseUsers.size());
                ParseUser[] data = parseUsers.toArray(new ParseUser[parseUsers.size()]);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, data);
                AutoCompleteTextView textView = (AutoCompleteTextView)
                        findViewById(R.id.searchUserTextField);
                if(parseUsers.size() < 40) textView.setThreshold(1);
                else textView.setThreshold(2);
                textView.setAdapter(adapter);
            } else {
                Log.d("score", "Error: " + e.getMessage());
            }
        }
    });

我刚刚在以下一行收到错误:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, data);

它说“无法解析构造函数'ArrayAdapter(com.Parse.FindCallback,int,com.parse.ParseUser [])'