Как получить правильный URL для массива JSON - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть несколько JSON объектов в JSONbin.io, которые имеют следующую структуру:

{
  "employee_contributions": [
    {
      "transaction_id": "01",
      "staff_no": "12",
      "ammount": "10000",
      "date": "20-2-2020"
   }
  ],
  "employer_contributions": [
    {
      "transaction_id": "01",
      "staff_no": "12",
      "ammount": "10000",
      "date": "20-2-2020"
    }
  ]
}

Я хочу получить доступ к объекту (ам) в массиве employee_contributions, но получаю ошибку 404. Я считаю, что мой URL-это проблема, но я не знаю почему. Вот соответствующий основной код активности:

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.jsonbin.io/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        yeeAPI yeeapi = retrofit.create(yeeAPI.class);
        Call<List<yee_contributions>> call = yeeapi.getYee_Contributions();
        call.enqueue(new Callback<List<yee_contributions>>() {
            @Override
            public void onResponse(Call<List<yee_contributions>> call, Response<List<yee_contributions>> response) {
                if (!response.isSuccessful()) {
                    yee_contr.setText("code: " + response.code());
                    return;
                }
                List<yee_contributions> contrs = response.body();
                for (yee_contributions yee_contributions : contrs){
                    String content = "";
                    content+=yee_contributions.getTransaction_id()+" ";
                    content+=yee_contributions.getStaff_no()+" ";
                    content+=yee_contributions.getAmmount()+" ";
                    content+=yee_contributions.getDate()+"\n\n";
                    yee_contr.append(content);
                }
            }

            @Override
            public void onFailure(Call<List<yee_contributions>> call, Throwable t) {
                yee_contr.setText(t.getMessage());

            }

        });

И это мой интерфейс:

public interface yeeAPI {
    @GET("b/5e536928d3c2f35597f6ca46/3/employeee_contributions")
    Call<List<yee_contributions>> getYee_Contributions();

}

Класс моей модели:

public class yee_contributions {
    private String transaction_id;
    private String staff_no;
    private String ammount;
    private String date;

    public String getTransaction_id() {
        return transaction_id;
    }

    public String getStaff_no() {
        return staff_no;
    }

    public String getAmmount() {
        return ammount;
    }

    public String getDate() {
        return date;
    }
}

Базовый URL в порядке. Только когда я добавляю /employee_contributions к своей конечной точке, я получаю ошибку 404.

1 Ответ

1 голос
/ 24 февраля 2020

Вы не можете получить доступ к employeee_contributions таким образом. Сначала вы должны получить целые данные, а затем проанализировать employeee_contributions. Для этого необходимо внести некоторые изменения. Проверьте ниже:

Шаг - 1: Чтобы выровнять свой ответ json, вы должны использовать другую модель, как показано ниже:

public class YeeResponse {
    private List<yee_contributions> employee_contributions;
    private List<yee_contributions> employer_contributions;

    //getter-setter

}

Шаг - 2: Измените интерфейс API, чтобы включить его, как показано ниже:

public interface yeeAPI {
    @GET("b/5e536928d3c2f35597f6ca46/3/")
    Call<YeeResponse> getYee_Contributions();
}

Шаг - 3: Измените реализацию enqueue и проанализируйте данные, как показано ниже:

Call<YeeResponse> call = yeeapi.getYee_Contributions();
call.enqueue(new Callback<YeeResponse>() {

    @Override
    public void onResponse(Call<YeeResponse> call, Response<YeeResponse> response) {
        if (!response.isSuccessful()) {

            return;
        }

        YeeResponse yeeResponse = response.body();
        List<yee_contributions> employee_contributions = yeeResponse.getEmployee_contributions();

        // Now loop through employee_contributions to get yee_contributions

        ....
    }

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

        ....
    }

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...