Модернизация не возвращает полную строку

Я сталкиваюсь с этой проблемой в течение многих часов. У меня есть строка 123#5432#7 по этой ссылке, но когда я пытаюсь получить ее через Retrofit, я получаю только символы перед первым #, в этом случае вывод равен 123, но мне нужна вся строка. Я попытался получить его с помощью OkHttpClient, он работает нормально. Может ли кто-нибудь найти проблему с моим кодом Или какие еще возможные способы?

Выход

123

но я хочу всю строку, как 123#5432#7

Обновлено: добавлено .addConverterFactory(ScalarsConverterFactory.create()), но ответ тот же.

Код

public class ApiClient {
    public static Retrofit retrofit;
    public static String BASE_URL = "https://prdec.com/status_app/";


    public static Retrofit getRetrofit(){
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        if (retrofit == null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}


public interface ApiService {

    @GET("status_app_return_string.php")
    Call<String> getStringResponse();
}


                ApiService apiService = ApiClient.getRetrofit().create(ApiService.class);
                apiService.getStringResponse()
                        .enqueue(new Callback<String>() {
                            @Override
                            public void onResponse(Call<String> call, Response<String> response) {
                                String str = response.body();
                                Log.d(TAG, "onResponse: "+str);
                            }

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


                            }
                        });

Добавьте фабрику преобразователей скаляров в свою модификацию, чтобы поддерживать String типы ответов. stackoverflow.com/questions/36523972/…

laalto 10.12.2020 16:04

@laalto я пытался добавить .addConverterFactory(ScalarsConverterFactory.create()) но ответ тот же

Shoaib Kakal 10.12.2020 16:19

Вы добавили его перед фабрикой gson, чтобы она имела приоритет над ней?

laalto 10.12.2020 16:28

Я добавил его после фабрики gson, как в приведенном выше коде. Влияет ли ранг?

Shoaib Kakal 10.12.2020 16:44

@laalto это сработало, я просто заменил `.addConverterFactory(ScalarsConverterFactory.create())` выше .addConverterFactory(GsonConverterFactory.create(gson)) ..

Shoaib Kakal 10.12.2020 17:34
2
5
465
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема была с ранжированием .addConverterFactory(GsonConverterFactory.create(gson)) и addConverterFactory(ScalarsConverterFactory.create())

ScalarsConverterFactory должен быть выше других фабрик преобразователей.

Не работает

 retrofit = new Retrofit.Builder()
      .baseUrl(BASE_URL)
      .addConverterFactory(GsonConverterFactory.create(gson))
      .addConverterFactory(ScalarsConverterFactory.create())
      .build();

Работающий

 retrofit = new Retrofit.Builder()
       .baseUrl(BASE_URL)
       .addConverterFactory(ScalarsConverterFactory.create())
       .addConverterFactory(GsonConverterFactory.create(gson))
       .build();

Другие вопросы по теме