2 Spinners: Populate second spinner from first spinner id selected using Retrofit

we in bali :

Hi I working with my android, I have two spinners and using retrofit to populate my spinners. I manage to populate first spinner. But I don't know how to get my second spinner populated under id selected from first spinner. I'm using codeigniter rest controller to pass the id and want to retrieve it using retrofit for second spinner, but I don't know how to do this? Please help me.

I already created Rest Controller by passing the id. Already created ApiInterface. And beans to get details data. First spinner working good.

Declaration

 classSpinner = (Spinner) findViewById(R.id.classSpinner);
    divSpinner = (Spinner) findViewById(R.id.divSpinner);

    classSpinner.setAdapter(mAdapter);

    mApiInterface = ApiClient.getClient().create(ApiInterface.class);

    getAllProvinsi();

ApiInterface

public interface ApiInterface {

//first spinner
    @GET("Testpage/provinsi")
    Call<GetProvinsi> getProvinsi();

//second spinner that I needed how to pass the id? and get data by id selected from first spinner
    @GET("Testpage/kotabyprovid/provinsi_id/")
    Call<GetKota> getKota();
}

GetProvinsi ( First Spinner )

public class GetProvinsi {

@SerializedName("result")
List<Provinsi> listDataProvinsi;


public List<Provinsi> getListDataProvinsi() {
    return listDataProvinsi;
}
public void setListDataProvinsi(List<Provinsi> listDataProvinsi) {
    this.listDataProvinsi = listDataProvinsi;
}

}

GetKota ( Second Spinner )

public class GetKota {

@SerializedName("result")
List<Kota> listDataKota;


public List<Kota> getListDataKota() {
    return listDataKota;
}
public void setListDataKota(List<Kota> listDataKota) {
    this.listDataKota = listDataKota;
}

}

First Spinner to get all data. I'm trying to select the id to populate second spinner from the adapter.

private void getAllProvinsi() {

    Call<GetProvinsi> kontakCall = mApiInterface.getProvinsi();
    kontakCall.enqueue(new Callback<GetProvinsi>() {
        @Override
        public void onResponse(Call<GetProvinsi> call, Response<GetProvinsi>
                response) {
            List<Provinsi> ProvinsiList = response.body().getListDataProvinsi();
            Log.d("Retrofit Get", "Jumlah data Kontak: " +
                    String.valueOf(ProvinsiList.size()));
            //mAdapter = new KontakAdapter(KontakList, getBaseContext());

            mAdapter = new ProvinsiAdapter(ProvinsiList, getBaseContext(), new ProvinsiAdapter.DetailsAdapterListener() {
                @Override
                public void classOnClick(View v, int position) {
                    //showClass(mTrainDetails, position);// do something or navigate to detailed classes
                }

                @Override
                public void daysOnClick(View v, int position) {
                    //showDays(movieList, position);// do something or navigate to running days
                }
            });

            classSpinner.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<GetProvinsi> call, Throwable t) {
            Log.e("Retrofit Get", t.toString());
        }
    });

First Spinner adapter implement with OnItemSelectedListner that I need help with the method what should be?

public class ProvinsiAdapter extends BaseAdapter implements AdapterView.OnItemSelectedListener {
    private LayoutInflater inflater;
List<Provinsi> mProvinsiList;
public ProvinsiAdapter.DetailsAdapterListener onClickListener;

    public ProvinsiAdapter(List<Provinsi> provinsiList, Context context, ProvinsiAdapter.DetailsAdapterListener listener) {
        inflater = LayoutInflater.from(context);
        this.mProvinsiList = provinsiList;
        this.onClickListener = listener;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return mProvinsiList.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;

        if(convertView == null){
            convertView = inflater.inflate(R.layout.lsv_provinsi_list, null);
            holder = new ViewHolder();
            holder.txtMenuName = (TextView) convertView.findViewById(R.id.tv_namaProv);
            holder.txtQuantity = (TextView) convertView.findViewById(R.id.tv_idProv);


            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }


        holder.txtMenuName.setText(mProvinsiList.get(position).getNamaProvinsi());

            holder.txtQuantity.setText(String.valueOf(mProvinsiList.get(position).getId()));



        return convertView;
    }

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

//Please help what should I put in here to populate second spinner

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

static class ViewHolder {
        TextView txtMenuName, txtQuantity, txtPrice;
    }

//region Interface Details listener
public interface DetailsAdapterListener {

    void classOnClick(View v, int position);

    void daysOnClick(View v, int position);
}

}

JSON Result with id Testpage/kotabyprovid/provinsi_id/1 for second spinner

{"result":[{"id_kota":"17","provinsi_id":"1","nama_kota":"Badung"},{"id_kota":"32","provinsi_id":"1","nama_kota":"Bangli"},{"id_kota":"94","provinsi_id":"1","nama_kota":"Buleleng"},{"id_kota":"114","provinsi_id":"1","nama_kota":"Denpasar"},{"id_kota":"128","provinsi_id":"1","nama_kota":"Gianyar"},{"id_kota":"161","provinsi_id":"1","nama_kota":"Jembrana"},{"id_kota":"170","provinsi_id":"1","nama_kota":"Karangasem"},{"id_kota":"197","provinsi_id":"1","nama_kota":"Klungkung"},{"id_kota":"447","provinsi_id":"1","nama_kota":"Tabanan"}],"0":200}

Please help and Thank You

Sarvani S :

Replace

@GET("Testpage/kotabyprovid/provinsi_id/")  
Call<GetKota> getKota(); 

with

@GET("Testpage/kotabyprovid/provinsi_id/{prov_id}")  
Call<GetKota> getKota(@Path("prov_id") int provId);

Now you can pass id to the method, the retrofit will take care of passing provId to the URL path.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=136248&siteId=1