Как проверить, преобразуется ли json из сети в мой объект или нет с помощью модернизации? - PullRequest
0 голосов
/ 13 февраля 2020

Я правильно получаю ответ по сети (я проверил его, используя HttpLoggingInterceptor.Level.BODY), но мои ViewModel LiveData все еще пусты.

projectMembers = Transformations.switchMap(selectedProjectId, input -> cuttingListRepository.getProjectMembersByProjectUnit(input));

В приведенном выше коде projectMembers.getValue() по-прежнему нулевой

Я не вижу ошибки в консоли, возможно, мой json ответ не преобразуется в объект, как быть в этом уверенным?

Я наблюдаю его внутри onCreateView фрагмента -

cuttingComponentViewModel.projectMembers.observe(this.getViewLifecycleOwner(), new Observer<List<PojoProjectMember>>() {
        @Override
        public void onChanged(List<PojoProjectMember> pojoProjectMembers) {
            System.out.println("getting observed");
        }
    });

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

измените свой класс ApiClient для модернизации с помощью этого кода, в котором используется фабрика преобразователей gson

public static ApiInterface retrofit = null;

    public static ApiInterface getClient() {

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);


        OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .connectTimeout(20, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS);

        if (retrofit == null) {

            Retrofit retro = new Retrofit.Builder()
                    .baseUrl(Constant.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(httpClient.build())
                    .build();

            retrofit = retro.create(ApiInterface.class);
        }

        return retrofit;
    }

и сериализуйте ваш класс pojo следующим образом

public class ResponseModel {

    @SerializedName("success")
    public boolean success;
    @SerializedName("message")
    public String message;
    @SerializedName("status")
    public String status;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

В сериализованном названии используются ключевые слова ответа API

0 голосов
/ 13 февраля 2020

LiveData всегда будет нулевым, если оно не наблюдается чем-либо. Убедитесь, что вы наблюдаете данные своей деятельности / фрагмента.

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