我正在使用gson而不是android进行改造,因为它更快,更安全。
问题在于改造是对=
和?
等特殊字符进行编码,而我使用的网址无法对这些字符进行解码。
这是我的代码:
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 restAdapter = new RestAdapter.Builder().setEndpoint(url).setRequestInterceptor(requestInterceptor).setConverter(new GsonConverter(gson)).setConverter(new GsonConverter(gson)).build();
请帮忙吗?
答案 0 :(得分:4)
您必须使用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);
}