Ich versuche, Liste der Dienste von Web-Service zu holen und es zu Autocompletetextview hinzufügen. Angenommen, Sie geben "a"
ein, erhalten Sie die folgende Liste von Diensten in der AutocompleteTextview. Ich denke, es ist ein JSON-Array, aber ich bekomme Fehler "Json error: Value Body Spa at 0 of type java.lang.String cannot be converted to JSONArray".
Bitte korrigieren Sie mich, wenn ich das falsch mache.set jsonarray list in autocompletetextview
// you get this json response on entering "a"
[
"Body Spa",
"Hair Cut",
"Hair massage",
"fghfghfgh",
"rtyrt",
"Gold Facial",
"Foot's massage"
]
public class HomeOptionTwo extends Fragment implements TextWatcher{
AutoCompleteTextView autoservice;
String[] list;
ArrayAdapter<String> adapter;
private static final String SERVICE = "http://192.168.200.1/android/spaservice";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.homeoptiontwo, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
autoservice = (AutoCompleteTextView)view.findViewById(R.id.service);
autoservice.addTextChangedListener(this);
}
private void prepareMyList() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, SERVICE,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
//JSONObject jObj = new JSONObject(response);
JSONArray jsonarray = new JSONArray(response);
for (int i = 0; i < jsonarray.length(); i++) {
Toast.makeText(getActivity(), "services:" + jsonarray.getJSONArray(i), Toast.LENGTH_SHORT).show();
adapter = new ArrayAdapter<String>(
getActivity(),
android.R.layout.simple_dropdown_item_1line,
list);
autoservice.setAdapter(adapter);
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("'phrase", autoservice.getText().toString());
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
prepareMyList();
}
@Override
public void afterTextChanged(Editable s) {
}
}
JSONArray enthält die Liste der Zeichenfolgen, Sie holen Array aus dem Array, die falsch ist. Ändern Sie Ihren Toast auf 'Toast.makeText (getActivity()," Dienste: "+ jsonarray.getString (i), Toast.LENGTH_SHORT) .show();' –
Sie brauchen keine 'TextWatcher' /' addTextChangedListener' noch asynchrone Voley-Anfragen, siehe http://stackoverflow.com/a/19860624/2252830 – pskink
Ich benutze volley, da der Web-Service die gesamte Liste von 36 Items entsprechend dem eingegebenen Text filtert. Nun, mein aktuelles Problem ist, dass ich alle 36 Elemente bekomme, auch wenn ich einen Text eintrage, der die Objektliste reduzieren sollte. @pskink –