Как написать общий ответ о модификации и иметь возможность регистрировать / отлаживать его, когда десериализация не работает? - PullRequest
0 голосов
/ 19 сентября 2018

Я боролся с этой проблемой в последние часы и искал руководство.

У меня есть запрос на обновление, который я хочу написать в общем виде, что означает, что я хотел бы получить JSONлюбого рода, например мешок с имуществом, и возможность работать с ним позже в приложении.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь получить его как JSON или String (а не какМодель или ResponseBody) приложение вылетает.Я думаю, что арест произошел из-за декодирования на основе того, что я вижу.

Это конструктор Retrofit.

public Retrofit getRetrofit(OkHttpClient okHttpClient) {
        Retrofit retrofit = new Retrofit
            .Builder()
            .baseUrl("https://reqres.in/")
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(MoshiConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();
        return retrofit;
    }

Интерфейс REST очень прост.

public interface IRestService {
    @GET("api/users?page=2")
    Observable<String> queryPage();
}

Я также попытался отладить эту проблему, и я добавил свой перехватчик регистратора, который, очевидно, не работает, и я понятия не имею, почему:

 public OkHttpClient getOkHttpClient(Interceptor requestInterceptor) {
        // HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        // loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        HttpLoggingInterceptor loggingInterceptor =
                new HttpLoggingInterceptor((msg) -> {
                    Log.d(HttpLoggingInterceptor.class.toString(), msg);
                });

        //loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        LoggingInterceptor customLoggingInterceptor = new LoggingInterceptor();

        return new okhttp3.OkHttpClient.Builder()
                .connectTimeout(CONNECT_TIMEOUT_IN_MS, TimeUnit.MILLISECONDS)
                .addInterceptor(requestInterceptor)
                .addInterceptor(loggingInterceptor)
                .addInterceptor(customLoggingInterceptor)
                .build();
    }

Пожалуйста, дайте мне знать, если что-то я делаю неправильнов получении JSON в общей форме, без модели.И было бы очень полезно, если бы я мог получить несколько советов о том, как отлаживать такого рода проблемы, поскольку регистратор ничего не регистрировал в Android Studio.Извините, если ни один из этих вопросов не является глупым, но я только начал создавать свое первое приложение на Android.У меня есть опыт работы на многих других языках.

1 Ответ

0 голосов
/ 19 сентября 2018

Вместо использования String для Observable в service (интерфейс), используйте Object в качестве типа.И когда вы получаете данные, вы всегда можете использовать Gson().toJson(body.toString()), чтобы преобразовать их в строку.Кроме того, наиболее вероятно, что ваше приложение падает на String, потому что у вас нет правильной фабрики конвертера (Scalar Factory).Вы можете проверить это на то же самое.

...