Search code examples
androidloopj

How to get indvidual data from jsonarray


I am trying to populate a spinner with data from mysql/rest service. I want to show only the id's of all employees in spinner.In the drop down box i see id with values and other columns as name: null, age: null etc. But after selecting one, i am able show id value alone by getting id value on my spinner adpater class. How to show id value on drop down box?

@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {

        ArrayList<Employee> spinnerArray = new ArrayList<Employee>();
        final SpinnerAdapter spinnerAdapter = new SpinnerAdapter(MainActivity.this, spinnerArray);
        for (int i = 0; i < response.length(); i++) 
        {
                try {
            spinnerAdapter.add(new Employee(response.getJSONObject(i)));
        } 
    catch (JSONException e) {
        e.printStackTrace();
        }
        }
        spinner.setAdapter(spinnerAdapter);

My adapter class

    public class SpinnerAdapter extends ArrayAdapter<Employee> {

    public SpinnerAdapter(Context context, ArrayList<Employee> employees) {
        super(context, R.layout.spinner_id, employees);
    }

    private static class ViewHolder {
        TextView employeeId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Employee employee = getItem(position);
        ViewHolder viewHolder;

        if (convertView == null) {
            viewHolder = new ViewHolder();

            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.spinner_id, parent, false);

            viewHolder.employeeId = (TextView) convertView.findViewById(R.id.value_employee_employeeId);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.employeeId.setText(employee.getEmployeeId());

        return convertView;

}

Solution

  • You are doing a few things wrong. First of all you populate your array with the json response. If you want to present the ID maybe you should consider using an array of strings ("ID").

    ArrayList<String> spinnerArray = new ArrayList<String>();
    for (int i = 0; i < response.length(); i++) {
        try {
            spinnerArray.add(new Employee(response.getJSONObject(i)).getID());
        } 
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
    

    After that you initialize you adapter

    final SpinnerAdapter spinnerAdapter = new SpinnerAdapter(MainActivity.this, spinnerArray);
    

    And finally you set your adapter to the spinner

    spinner.setAdapter(spinnerAdapter);