gpt4 book ai didi

java - AutoCompleteTextView 自定义 ArrayAdapter 显示整个 ArrayList 而不是单独的字符串

转载 作者:行者123 更新时间:2023-12-02 12:04:20 24 4
gpt4 key购买 nike

我正在尝试制作一个 AutoCompleteTextView 来显示来自 Google 的建议,但就像标题所说;整个 ArrayList 显示为建议,而不是单独的建议。

如何显示单独的字符串,我是否错误地将它们添加到适配器中?

这是我的自定义 ArrayAdapter

class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private ArrayList<String> data;
private static final String BASE_URL = "http://suggestqueries.google.com/complete/search?";
private static final String CLIENT = "client=firefox"; // firefox = JSON | toolbar = toolbar
private static final String SEARCH_URL = BASE_URL + CLIENT + "&q=";
private final static String UTF8 = "UTF-8";

AutoCompleteAdapter(@NonNull Context context, @LayoutRes int resource) {
super(context, resource);
this.data = new ArrayList<>();
}

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

@Nullable
@Override
public String getItem(int index) {
return data.get(index);
}

@NonNull
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null) {
HttpURLConnection conn = null;
InputStream input = null;
try {
URL url = new URL(SEARCH_URL + constraint.toString());
conn = (HttpURLConnection) url.openConnection();
input = conn.getInputStream();
InputStreamReader reader = new InputStreamReader(input, UTF8);
BufferedReader buffer = new BufferedReader(reader, 8192);
StringBuilder builder = new StringBuilder();
String line;
while ((line = buffer.readLine()) != null) {
builder.append(line);
}
JSONArray terms = new JSONArray(builder.toString());
ArrayList<String> suggestions = new ArrayList<>();
for (int i = 0; i < terms.length(); i++) {
String term = terms.getString(i);
suggestions.add(term);
}
results.values = suggestions;
results.count = suggestions.size();
data = suggestions;
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (conn != null) conn.disconnect();
}
}
return results;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else notifyDataSetInvalidated();
}
};
}

}

我做了一些搜索,看看其他人是否也遇到过同样的问题,但我找不到任何相关内容。

多年来我一直在为这个问题烦恼。提前谢谢你。

最佳答案

看起来您看到的响应是“[search_term, [result1, result2...]]”,因此当您解析时,您将得到一个长度为二的数组:“[search_term, everything_else]”。下面解析一下你感兴趣的“everything_else”。我建议您仅使用此作为起点,因为您可能需要进行一些额外的错误检查:

    JSONArray terms = new JSONArray(builder.toString());
terms = new JSONArray(terms.get(1).toString());

关于java - AutoCompleteTextView 自定义 ArrayAdapter 显示整个 ArrayList 而不是单独的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47015521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com