2015-05-06 2 views
13

Я работаю над приложением Android, которое использует Retrofit для создания спокойного клиента. Чтобы отлаживать вызовы сетей, я хотел бы отобразить или сбросить URL-адрес, который на самом деле вызывается. Есть ли способ сделать это? Я включил некоторый код ниже, который показывает, как приложение в настоящее время использует модификацию.Retrofit @GET - как отобразить строку запроса?

Клиент определение интерфейса:

import retrofit.Callback; 
import retrofit.http.Body; 
import retrofit.http.GET; 
import retrofit.http.Headers; 
import retrofit.http.POST; 
import retrofit.http.Path; 

// etc... 

public interface MyApiClient { 

    @Headers({ 
      "Connection: close" 
    }) 

    @GET("/{userId}/{itemId}/getCost.do") 
    public void get(@Path("userId") String userId, @Path("itemId") String userId, Callback<Score> callback); 


//....etc 

} 

служба, которая использует клиент генерироваться:

// etc... 
    import javax.inject.Inject; 
    import retrofit.Callback; 
    import retrofit.RetrofitError; 
    import retrofit.client.Response; 


@Inject 
MyApiClient myApiClient; 

// etc... 
       myApiClient.getCost(myId, itemId, new Callback<Cost>() { 
        @Override 
        public void success(Cost cost, Response response) { 
         Log.d("Success: %s", String.valueOf(cost.cost)); 
         if (cost.cost != -1) { 
          processFoundCost(cost); 
         } else { 
          processMissingCost(itemId); 
         } 
         stopTask(); 
        } 

        @Override 
        public void failure(RetrofitError error) { 
         handleFailure(new CostFailedEvent(), null); 
        } 
       }); 
      } 

ответ

7

RetrofitError имеет getUrl() метод, который возвращает URL.

Также Response имеет метод getUrl(), а также в пределах обратного вызова.

Это, и вы можете также задать уровень журнала как на this question:

RestAdapter adapter = (new RestAdapter.Builder()). 
//... 
      setLogLevel(LogLevel.FULL).setLog(new AndroidLog("YOUR_LOG_TAG"))    

Хотя на основе docs, LogLevel.BASIC должны делать то, что вам нужно.

BASIC 
Log only the request method and URL and the response status code and execution time. 
+0

Спасибо! Хотел бы я согласиться на оба ответа. –

+1

Я поддержал его, это справедливо: D рад я мог бы помочь – EpicPandaForce

5

Да, вы можете включить ведение журнала отладки, вызвав setLogLevel() на вашем RestAdapter.

Я обычно устанавливаю протоколирование в LogLevel.FULL для отладки строит так:

RestAdapter adapter = builder.setEndpoint("example.com") 
    .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) 
    .build(); 

Это будет автоматически распечатывать всю информацию, связанную с HTTP-запросами, включая URL вы ударяя, заголовки, и тело как запроса, так и ответа.

+0

Спасибо - отличная информация. –

32

call.request().url(), где call - тип retrofit2.Call.

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