Модернизация кодировки специальных символов

Я использую модифицированный gson вместо android, так как он быстрее и безопаснее.

Проблема в том, что модификация кодирует специальные символы, такие как = и ?, и URL-адрес, который я использую, не может декодировать эти символы.

Это мой код:

API-класс:

public interface placeApi {

@GET("/{id}")
public void getFeed(@Path("id") TypedString id, Callback<PlaceModel> response);
}

Основной класс:

String url = "http://api.beirut.com/BeirutProfile.php?"; 
String next = "profileid=111";


 //Creating adapter for retrofit with base url
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(url).setRequestInterceptor(requestInterceptor).build();

    //Creating service for the adapter
    placeApi placeApi = restAdapter.create(placeApi.class);

    placeApi.getFeed(id, new Callback<PlaceModel>() {
        @Override
        public void success(PlaceModel place, Response response) {
            // System.out.println();
            System.out.println(response.getUrl());
            name.setText("Name: " + place.getName());
        }

        @Override
        public void failure(RetrofitError error) {
            System.out.println(error.getMessage());
        }
    });

Я попытался решить проблему с помощью этого метода gson, но он не сработал, скорее всего, потому, что он включает только первую часть URL-адреса, а не ту, которую я отправляю в интерфейс placeApi:

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

и добавил это при создании реадаптера:

RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(url).setRequestInterceptor(requestInterceptor).setConverter(new GsonConverter(gson)).setConverter(new GsonConverter(gson)).build();

Любая помощь, пожалуйста?


person M. Halimeh    schedule 11.09.2015    source источник


Ответы (1)


Вы должны использовать Use @EncodedPath. как это:

public interface placeApi {
@GET("/{id}")
public void getFeed(@EncodedPath("id") TypedString id,
   Callback<PlaceModel> response);
}

Примечание. Вышеприведенное работает, но теперь я смотрю документ, и кажется, что @EncodedPath устарел, поэтому вместо этого используйте @PATH с его параметром:

public interface placeApi {
@GET("/{id}")
public void getFeed(@Path("id", encode=false) TypedString id,
   Callback<PlaceModel> response);
}

ссылка: https://square.github.io/retrofit/2.x/retrofit/

person Ehsan    schedule 11.09.2015
comment
Это устарело, см. этот ответ. - person alierdogan7; 04.08.2021