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

AutoCompleteTextView Custom ArrayAdapter showing whole ArrayList instead of separate strings

我正在尝试制作一个显示来自 Google 的建议的 AutoCompleteTextView,但正如标题所说;整个 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();
        }
    };
}

}

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

我已经为此苦恼很久了。先谢谢你了。

      please check this parsing...
      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);
                }

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

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