Android 如何从改造中获取响应URL?
我在android项目中使用RESTWeb服务的改造。在我尝试从返回URL读取几个参数之前,它总体上工作良好。 例如,在web浏览器上:Android 如何从改造中获取响应URL?,android,retrofit,Android,Retrofit,我在android项目中使用RESTWeb服务的改造。在我尝试从返回URL读取几个参数之前,它总体上工作良好。 例如,在web浏览器上: 类型“” 按回车键 它变成了“” 现在的问题是如何从改装响应中获得“abc=123”值。 谢谢你 您可以尝试从改装回调获取此数据。 在改装服务中,使用回调声明方法 public interface YourService { @GET("/url") JsonElement get(Callback<JsonElement> cb); }
谢谢你 您可以尝试从改装回调获取此数据。 在改装服务中,使用回调声明方法
public interface YourService {
@GET("/url")
JsonElement get(Callback<JsonElement> cb);
}
RestAdapter adapter = new RestAdapter.Builder().setEndpoint("http://foobar.com").build();
YourService service = adapter.create(YourService.class)
我没有测试它,但是这样的重定向是通过HTTP头“Location:”发送的
您可以使用以下代码检索Url:
Callback<Void> cb = new Callback<Void>() {
@Override
public void success(Void aVoid, Response response) {
String url = null;
List<Header> headers = response.getHeaders();
for (Header header : headers) {
if (header.getName() == "Location") {
url = header.getValue();
break;
}
}
// Do something with url
}
@Override
public void failure(RetrofitError error) {
}
}
Callback cb=new Callback(){
@凌驾
公共作废成功(作废避免、响应){
字符串url=null;
List headers=response.getHeaders();
用于(标题:标题){
if(header.getName()=“位置”){
url=header.getValue();
打破
}
}
//用url做些什么
}
@凌驾
公共无效失败(错误){
}
}
一个要求是,HTTP客户机不会自动遵循重定向,但我对改型不太熟悉。以下是我的方式:(使用改型2
)
- 首先:创建
拦截器的实例:
public class LoggingInterceptor implements Interceptor { private String requestUrl; public String getRequestUrl() { return requestUrl; } public void setRequestUrl(String requestUrl) { this.requestUrl = requestUrl; } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); setRequestUrl(response.request().url().toString()); return response; } }
- 将
添加到拦截器
改装
Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); retrofit.client().interceptors().add(new LoggingInterceptor());
- 从
onResponse()获取
methodurl
@Override public void onResponse(Response<T> response, Retrofit retrofit) { List<Interceptor> data = retrofit.client().interceptors(); if (data != null && data.size() > 0) { for (int i = 0; i < data.size(); i++) { if (data.get(i) instanceof LoggingInterceptor) { LoggingInterceptor intercept = (LoggingInterceptor) data.get(i); String url = intercept.getRequestUrl(); // todo : do what's ever you want with url break; } else { continue; } } } }
@覆盖 公共响应(响应、改装){ 列表数据=翻新.client().interceptors(); if(data!=null&&data.size()>0){ 对于(int i=0;i
- 我已经解决了这个问题。以下是我的解决方案:
定义请求
@GET
Call<String> getSend(@Url String url);
@GET
调用getSend(@Url字符串Url);
发送
Api.get(WXApi.class).getSend(ip).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.d(TAG,"response.raw().request().url();"+response.raw().request().url());}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
Api.get(WXApi.class).getSend(ip.enqueue(newcallback()){
@凌驾
公共void onResponse(调用、响应){
Log.d(标记“response.raw().request().url();”+response.raw().request().url();)
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
首先创建呼叫,然后打印。见下例:
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<LoginResponse> call = apiService.getLoginData(phone_number.getText().toString());
Log.e(" Login url", call.request().url().toString());
apinterface-apisservice=ApiClient.getClient().create(apinterface.class);
Call Call=apiService.getLoginData(电话号码.getText().toString());
Log.e(“登录url”,call.request().url().toString());
Response.raw().request().url().query()代码>
为我工作。Hi,getUrl()返回原始url,而不是重定向到的url。Hi,我在浏览器上跟踪了网络活动,第一个响应是302,改型由于某种原因无法捕获,也许我将等待将来的更新。无论如何谢谢。response.raw().request().url();没有给我op问题的查询参数“abc=123”。它只是给了我完整的URLresponse.raw().request().url().toString()文件
Api.get(WXApi.class).getSend(ip).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.d(TAG,"response.raw().request().url();"+response.raw().request().url());}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<LoginResponse> call = apiService.getLoginData(phone_number.getText().toString());
Log.e(" Login url", call.request().url().toString());