2015-09-11 2 views
4

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

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

Это мой код:

апи класс:

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 restAdapter = new RestAdapter.Builder().setEndpoint(url).setRequestInterceptor(requestInterceptor).setConverter(new GsonConverter(gson)).setConverter(new GsonConverter(gson)).build(); 

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

ответ

3

Вы должны использовать 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/

+0

Спасибо, он отлично работает !! –

+0

добро пожаловать, вы также можете проголосовать за мой ответ. – Ehsan

+0

ok что такое TypeString? –

Смежные вопросы