使用来自 Parse.com (Android) 的数据填充 String[] 数组
Populating a String[] Array with data from Parse.com (Android)
我设置了以下阵列适配器:
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 中的用户 class 检索到的数据填充我的 USERS
数组?基本上,用例如下:
1) 用户正在输入 AutoCompleteTextView
,
2) 建议根据我的 Parse.com 用户 class、
中的可用用户名弹出
3) 用户选择名称并搜索用户。
我意识到这可能不是我要实现的目标的正确或高级实现,但我只是想逐步完成此工作,因为我是 Android 的新手。
我的问题基本上可以归结为,如何根据对 AutoCompleteTextView
的输入,使用来自 Parse 的用户列表动态填充 USERS
数组?
答案更新: 我在我的应用程序中使用了以下内容。我必须将 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());
}
}
});
此问题的一个(未接受的)答案:Dynamically updating an AutoCompleteTextView adapter 展示了如何在适配器中使用过滤器来动态更新建议。您必须实施 "autocomplete()" 方法,在您的情况下 return 来自 Parse.
编辑:通过动态填充,Op 要求 运行 在显示列表之前进行查询,而不是响应用户在列表中的输入。
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()]);
String[] strings = new String[data.length];
for (int i=0; i<data.length; i++) {
strings[i] = data[i].getString(ParseConstants.KEY_USER_REAL_NAME);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 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("score", "Error: " + e.getMessage());
}
}
});
我不能做这样的事情吗?
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[])'
我设置了以下阵列适配器:
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 中的用户 class 检索到的数据填充我的 USERS
数组?基本上,用例如下:
1) 用户正在输入 AutoCompleteTextView
,
2) 建议根据我的 Parse.com 用户 class、
中的可用用户名弹出3) 用户选择名称并搜索用户。
我意识到这可能不是我要实现的目标的正确或高级实现,但我只是想逐步完成此工作,因为我是 Android 的新手。
我的问题基本上可以归结为,如何根据对 AutoCompleteTextView
的输入,使用来自 Parse 的用户列表动态填充 USERS
数组?
答案更新: 我在我的应用程序中使用了以下内容。我必须将 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());
}
}
});
此问题的一个(未接受的)答案:Dynamically updating an AutoCompleteTextView adapter 展示了如何在适配器中使用过滤器来动态更新建议。您必须实施 "autocomplete()" 方法,在您的情况下 return 来自 Parse.
编辑:通过动态填充,Op 要求 运行 在显示列表之前进行查询,而不是响应用户在列表中的输入。
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()]);
String[] strings = new String[data.length];
for (int i=0; i<data.length; i++) {
strings[i] = data[i].getString(ParseConstants.KEY_USER_REAL_NAME);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 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("score", "Error: " + e.getMessage());
}
}
});
我不能做这样的事情吗?
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[])'