2017-10-30 13 views
0

Googleからの提案を表示するAutoCompleteTextViewを作成しようとしていますが、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(); 
     } 
    }; 
} 

}

ArrayAdapter私の習慣です。

私は年齢のうちにこれ以上の私の髪を引っ張ってきました..事前にありがとうございます。

答えて

1

あなたが見ているという回答は、「[SEARCH_TERM、[結果1、結果2 ...]]」、あなたが解析しているときにあなたは長さ2の配列を取得しているあるように見えます:、「[SEARCH_TERMほかのすべて]"。次は、あなたが興味を持っている "everything_else"を解析します。追加のエラーチェックが必要な場合があるので、これを出発点として使用することをお勧めします。

JSONArray terms = new JSONArray(builder.toString()); 
    terms = new JSONArray(terms.get(1).toString()); 
0
 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); 
       } 
関連する問題