Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从改造中获取响应URL?_Android_Retrofit - Fatal编程技术网

Android 如何从改造中获取响应URL?

Android 如何从改造中获取响应URL?,android,retrofit,Android,Retrofit,我在android项目中使用RESTWeb服务的改造。在我尝试从返回URL读取几个参数之前,它总体上工作良好。 例如,在web浏览器上: 类型“” 按回车键 它变成了“” 现在的问题是如何从改装响应中获得“abc=123”值。 谢谢你 您可以尝试从改装回调获取此数据。 在改装服务中,使用回调声明方法 public interface YourService { @GET("/url") JsonElement get(Callback<JsonElement> cb); }

我在android项目中使用RESTWeb服务的改造。在我尝试从返回URL读取几个参数之前,它总体上工作良好。 例如,在web浏览器上:

  • 类型“”
  • 按回车键
  • 它变成了“”
  • 现在的问题是如何从改装响应中获得“abc=123”值。
    谢谢你

    您可以尝试从改装回调获取此数据。 在改装服务中,使用回调声明方法

    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()获取
      url
      method

      @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());