Подтвердить что ты не робот

Как получить ответ как String с использованием модификации без использования GSON или любой другой библиотеки в android

Я пытаюсь получить ответ от следующего Api:

https://api.github.com/users/username

Но я не знаю, как получить ответ как String, чтобы я мог использовать String для синтаксического анализа и получения JSONObject.

Используемая версия для доработки:

Модифицированная: 2.0.0-beta1

Я пробовал это до сих пор:

public interface GitHubService {
        @GET("/users/{user}")
        public String listRepos(@Path("user") String user,Callback<String> callback);
    }

:

GitHubService service = retrofit.create(GitHubService.class);
        service.listRepos("username", new Callback<String>() {
            @Override
            public void onResponse(Response response) {
                System.out.println(response.toString());
            }

            @Override
            public void onFailure(Throwable t) {

            }
        });

исключение:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.String. Tried:
    * retrofit.ExecutorCallAdapterFactory
            at retrofit.Utils.resolveCallAdapter(Utils.java:67)
            at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:49)

Любая помощь будет действительно оценена.

4b9b3361

Ответ 1

** Обновление ** В модификацию добавлен конвертер скарасов, который позволяет ответить String с меньшей церемонией, чем мой первоначальный ответ ниже.

Пример интерфейса -

public interface GitHubService {
    @GET("/users/{user}")
    Call<String> listRepos(@Path("user") String user);
}

Добавьте ScalarsConverterFactory в ваш модифицированный строитель. Примечание.. При использовании ScalarsConverterFactory и еще factory, сначала добавьте скаляры factory.

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(ScalarsConverterFactory.create())
    // add other factories here, if needed.
    .build();

Вам также потребуется включить конвертер скаляров в файл gradle -

compile 'com.squareup.retrofit2:converter-scalars:2.1.0'

--- Оригинальный ответ (по-прежнему работает, просто больше кода) ---

Я согласен с @CommonsWare в том, что кажется немного странным, что вы хотите перехватить запрос на обработку JSON самостоятельно. В большинстве случаев POJO имеет все необходимые данные, поэтому нет необходимости возиться в области JSONObject. Я подозреваю, что ваша конкретная проблема может быть решена с помощью специального gson TypeAdapter или модификации Converter, если вам нужно манипулировать JSON. Тем не менее, модификация обеспечивает более простое JSON-синтаксическое разборку через Gson. Он также управляет множеством других утомительных задач, связанных с запросами REST. Просто потому, что вы не хотите использовать одну из функций, не означает, что вам нужно выбросить все это. Есть моменты, когда вы просто хотите получить необработанный поток, так вот как это сделать -

Во-первых, если вы используете Retrofit 2, вы должны начать использовать API Call. Вместо отправки объекта для преобразования в качестве параметра типа используйте ResponseBody из okhttp -

public interface GitHubService {
    @GET("/users/{user}")
    Call<ResponseBody> listRepos(@Path("user") String user);
}

то вы можете создать и выполнить свой вызов -

GitHubService service = retrofit.create(GitHubService.class);
Call<ResponseBody> result = service.listRepos(username);
result.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Response<ResponseBody> response) {
        try {
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Throwable t) {
        e.printStackTrace();
    }
});

Примечание Код выше вызовов string() объекта ответа, который считывает весь ответ в String. Если вы передаете тело тому, что может поглощать потоки, вы можете вызвать charStream(). См. ResponseBody.