Как заполнить 3 вложенных счетчика данными из JSON с помощью Retrofit во фрагмент Android Studio - PullRequest
0 голосов
/ 25 марта 2019

У меня проблема с группой спиннеров в андроид студии.Мне нужно использовать JSON по этой ссылке "104.130.222.221:1337/ubigeo" и использовать данные, чтобы заполнить 3 счетчика в следующем порядке:

Спиннер 1: Получить элемент из отдела -> Спиннер 2: Получить группыПорядка провинций по департаментам -> Спиннер 3: Получить группу округов по провинциям

При выборе элемента в Spinner1, Spinner2 должен быть заполнен.При выборе элемента в Spinner2 должно быть заполнено Spinner3.

На основе значения параметра в объекте Json.Я использую модификацию для управления вызовом и получения тела ответа. Response.Body отладочный вид

Пример данных JSON

[
  {
    "id": "5c69dfe0278329adcd3bc5bf",
    "departamento": "01",
    "provincia": "00",
    "distrito": "00",
    "nombre": "Amazonas"
  },
  {
    "id": "5c69dfe0278329adcd3bc5c0",
    "departamento": "01",
    "provincia": "01",
    "distrito": "00",
    "nombre": "Chachapoyas"
  },
  {
    "id": "5c69dfe0278329adcd3bc5c1",
    "departamento": "01",
    "provincia": "01",
    "distrito": "01",
    "nombre": "Chachapoyas"
      },
 ...etc,etc
    ]

Ubigeo.java

public interface Ubigeo {
//This call give me the list of only departments

    @GET("ubigeo")
    Call<List<UbigeoPojo>> getDepartamentos(@Query("distrito") String dist, @Query ("provincia") String prov);

//Next to it i need to add more calls
}

search_fragment.java

public class busqueda_fragment extends Fragment {

    ArrayList<Departamento> depList = new ArrayList<> ();
    ArrayList<Provincia> provList = new ArrayList<> ();
    ArrayList<Distrito> disList = new ArrayList<> ();
    ArrayAdapter<Departamento> depAdap;
    ArrayAdapter<Provincia> provAdap;
    ArrayAdapter<Distrito> disAdap;

    private static final  String TAG = "Locales";
    private static final String TAG_ERROR = "Debug: ";

    private Retrofit rtUbigeo;
    private Ubigeo spinnerFilter;

    public busqueda_fragment() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        rtUbigeo = new Retrofit.Builder ()
                .baseUrl (NEW_TEST_URL)
                .addConverterFactory (GsonConverterFactory.create ())
                .build ();

        setDeptData();


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate (R.layout.fragment_busqueda, container, false);

        final Spinner spDep = (Spinner) v.findViewById (R.id.spDepartamento);
        final Spinner spPro = (Spinner) v.findViewById (R.id.spProvincia);
        final Spinner spDis = (Spinner) v.findViewById (R.id.spDistrito);

        depAdap = new ArrayAdapter<Departamento> (getContext (), android.R.layout.simple_spinner_item, depList);
        depAdap.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);
        depAdap.notifyDataSetChanged ();
        spDep.setAdapter (depAdap);


        return v;
    }

private void setDeptData () {

            spinnerFilter = rtUbigeo.create (Ubigeo.class);
            Call<List<UbigeoPojo>> call = spinnerFilter.getDepartamentos ("00", "00");
            call.enqueue (new Callback<List<UbigeoPojo>> () {
                @Override
                public void onResponse(Call<List<UbigeoPojo>> call, Response<List<UbigeoPojo>> response) {
                    if (response.isSuccessful ()) {
                        try {
                            List<UbigeoPojo> dep = response.body ();

                            for (int i = 0; i > dep.size (); i++) {
                                String Code = dep.get (i).getId ();
                                String d1 = dep.get (i).getDepartamento ();
                                String d2 = dep.get (i).getProvincia ();
                                String d3 = dep.get (i).getDistrito ();
                                String d4 = dep.get (i).getNombre ();


                            }



                        } catch (Exception e) {
                            Log.d (TAG_ERROR, "Hay un error");
                            e.printStackTrace ();
                        }
                    } else {
                        Log.i (TAG, "El metodo try ha fallado: " + response.errorBody ());
                    }
                }

                @Override
                public void onFailure(Call<List<UbigeoPojo>> call, Throwable t) {

                }
            });
       }
}

До сих пор мне удавалось загрузить тело ответа и получить массив json, но я не знаю, как поместить данные в счетчики

Образ изображения Response.body

3 Вид прядильщика

...