[英]Android Spinner not populating with JSON data Volley Response
我正在使用Multi Spinner和Android Volley库来处理我的应用程序的网络请求,问题是即使我从服务器获取响应,我的微调器也没有填充响应,而从volley的响应到IP的响应也没有填充微调器,请帮助...下面是我的代码
StringRequest stringRequest = new StringRequest(Request.Method.GET, IP.IP+"/api/users/view_group", new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Toast.makeText(Room_Config.this, response, Toast.LENGTH_SHORT).show();
String text=response;
System.out.println(response);
try {
JSONObject obj = new JSONObject(response);
String strMessage = (String) obj.get("message");
JSONArray jarray = new JSONArray(strMessage);
for (int i = 0; i < jarray.length(); i++) {
JSONObject obj1 = jarray.getJSONObject(i);
//id= (int) obj1.get("group_id");
list1.add((int) obj1.get("group_id"));
list.add((String) obj1.get("group_name"));
map.put((String) obj1.get("group_name"), (Integer) obj1.get("group_id"));}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();
} else if (error instanceof NoConnectionError) {
Toast.makeText(Room_Config.this,"No Connection Found", Toast.LENGTH_SHORT).show();
} else if (error instanceof ServerError) {
Toast.makeText(Room_Config.this,"Server Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof NetworkError) {
Toast.makeText(Room_Config.this,"Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof ParseError) {
Toast.makeText(Room_Config.this,"Parse Error", Toast.LENGTH_SHORT).show();
}
}
});
stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(stringRequest);
System.out.println("Group Name List is" + list);
System.out.println("\nGroup id list is---> " + list1);
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
et1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length()<3) {
if (!validateNo()) {
return;
}
}else {
inputLayoutNo.setErrorEnabled(false);
}
}
});
et2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!validateName()) {
return;
}
}
});
et3.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!validateDesc()) {
return;
}
}
});
if (list.isEmpty()){ Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();}
// TreeMap<String, Boolean> items = new TreeMap<>();
HashMap<String,Boolean> items=new HashMap<>();
for (String item : list) {
items.put(item, Boolean.FALSE);
}
MultiSpinner simpleSpinner = (MultiSpinner) findViewById(R.id.room_spinner);
simpleSpinner.setItems(items, new MultiSpinner.MultiSpinnerListener() {
@Override
public void onItemsSelected(boolean[] selected) {
mylist.clear();
nlist.clear();
// your operation with code...
for (int i = 0; i < selected.length; i++) {
if (selected[i]) {
Log.i("TAG", i + " : " + list.get(i));
System.out.println("Selected Item is----->" + list.get(i));
mylist.add(list.get(i));
System.out.println("My List is\t" + mylist);
}
}
for (int j = 0; j < mylist.size(); j++) {
objh = map.get(mylist.get(j));
myIntArray = map.get(mylist.get(j));
nlist.add(myIntArray);
System.out.println("New Id List is-------->" + nlist);
}
}
});
请帮忙.....
这是我使用的Multispinner类
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import com.rey.material.widget.Spinner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.TreeMap;
public class MultiSpinner extends Spinner implements OnMultiChoiceClickListener, OnCancelListener {
private List<String> items;
private boolean[] selected;
private String defaultText = "Click to Select Group";
private MultiSpinnerListener listener;
public MultiSpinner(Context context) {
super(context);
}
public MultiSpinner(Context arg0, AttributeSet arg1) {
super(arg0, arg1);
}
public MultiSpinner(Context arg0, AttributeSet arg1, int arg2) {
super(arg0, arg1, arg2);
}
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
selected[which] = isChecked;
}
@Override
public void onCancel(DialogInterface dialog) {
// refresh text on spinner
StringBuilder spinnerBuffer = new StringBuilder();
for (int i = 0; i < items.size(); i++) {
if (selected[i]) {
spinnerBuffer.append(items.get(i));
spinnerBuffer.append(", ");
}
}
String spinnerText = "";
spinnerText = spinnerBuffer.toString();
if (spinnerText.length() > 2) {
spinnerText = spinnerText.substring(0, spinnerText.length() - 2);
} else {
spinnerText = defaultText;
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(),
R.layout.textview_for_spinner,
new String[]{spinnerText});
setAdapter(adapter);
if (selected.length > 0) {
listener.onItemsSelected(selected);
}
}
@Override
public boolean performClick() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(defaultText);
builder.setMultiChoiceItems(
items.toArray(new CharSequence[items.size()]), selected, this);
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setOnCancelListener(this);
builder.show();
return true;
}
/**
* Sets items to this spinner.
* @param items A HashMap where the keys are the values to display in the spinner
* and the value the initial selected state of the key.
* @param listener A MultiSpinnerListener.
*/
public void setItems(HashMap<String, Boolean> items,
MultiSpinnerListener listener) {
this.items = new ArrayList<>(items.keySet());
this.listener = listener;
List<Boolean> values = new ArrayList<>(items.values());
selected = new boolean[values.size()];
for (int i = 0; i < items.size(); i++) {
selected[i] = values.get(i);
}
// all text on the spinner
ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(),
R.layout.textview_for_spinner, new String[]{defaultText});
setAdapter(adapter);
// Set Spinner Text
onCancel(null);
}
public interface MultiSpinnerListener {
void onItemsSelected(boolean[] selected);
}
}
如本文所述
// create spinner list elements
ArrayAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
adapter.add("Item1");
adapter.add("Item2");
adapter.add("Item3");
adapter.add("Item4");
adapter.add("Item5");
// get spinner and set adapter
spinner = (MultiSpinner) findViewById(R.id.spinnerMulti);
spinner.setAdapter(adapter, false, onSelectedListener);
使用此代码解决您的问题
StringRequest stringRequest = new StringRequest(Request.Method.GET, IP.IP+"/api/users/view_group", new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Toast.makeText(Room_Config.this, response, Toast.LENGTH_SHORT).show();
String text=response;
System.out.println(response);
try {
JSONObject obj = new JSONObject(response);
String strMessage = (String) obj.get("message");
JSONArray jarray = new JSONArray(strMessage);
for (int i = 0; i < jarray.length(); i++) {
JSONObject obj1 = jarray.getJSONObject(i);
//id= (int) obj1.get("group_id");
list1.add((int) obj1.get("group_id"));
list.add((String) obj1.get("group_name"));
map.put((String) obj1.get("group_name"), (Integer) obj1.get("group_id"));}
//call this method with your new data eg map
setSpinnerData(map);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();
} else if (error instanceof NoConnectionError) {
Toast.makeText(Room_Config.this,"No Connection Found", Toast.LENGTH_SHORT).show();
} else if (error instanceof ServerError) {
Toast.makeText(Room_Config.this,"Server Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof NetworkError) {
Toast.makeText(Room_Config.this,"Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof ParseError) {
Toast.makeText(Room_Config.this,"Parse Error", Toast.LENGTH_SHORT).show();
}
}
});
stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(stringRequest);
System.out.println("Group Name List is" + list);
System.out.println("\nGroup id list is---> " + list1);
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
et1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length()<3) {
if (!validateNo()) {
return;
}
}else {
inputLayoutNo.setErrorEnabled(false);
}
}
});
et2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!validateName()) {
return;
}
}
});
et3.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!validateDesc()) {
return;
}
}
});
if (list.isEmpty()){ Toast.makeText(Room_Config.this,"Request Time-Out", Toast.LENGTH_SHORT).show();}
// TreeMap<String, Boolean> items = new TreeMap<>();
HashMap<String,Boolean> items=new HashMap<>();
for (String item : list) {
items.put(item, Boolean.FALSE);
}
MultiSpinner simpleSpinner = (MultiSpinner) findViewById(R.id.room_spinner);
setSpinnerData(items);
新方法
public void setSpinnerData(TreeMap<String, Boolean> items){
simpleSpinner.setItems(items, new MultiSpinner.MultiSpinnerListener() {
@Override
public void onItemsSelected(boolean[] selected) {
mylist.clear();
nlist.clear();
// your operation with code...
for (int i = 0; i < selected.length; i++) {
if (selected[i]) {
Log.i("TAG", i + " : " + list.get(i));
System.out.println("Selected Item is----->" + list.get(i));
mylist.add(list.get(i));
System.out.println("My List is\t" + mylist);
}
}
for (int j = 0; j < mylist.size(); j++) {
objh = map.get(mylist.get(j));
myIntArray = map.get(mylist.get(j));
nlist.add(myIntArray);
System.out.println("New Id List is-------->" + nlist);
}
}
});}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.