Retrofit @GET - как отобразить строку запроса?
Я работаю над приложением Android, которое использует Retrofit для создания спокойного клиента. Чтобы отлаживать вызовы сетей, я хотел бы отображать или выгружать URL-адрес, который фактически вызывается. Есть ли способ сделать это? Я включил некоторый код ниже, который показывает, как приложение в настоящее время использует модификацию.
Определение клиентского интерфейса:
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);
}
});
}
Ответы
Ответ 1
RetrofitError
имеет метод getUrl()
, который возвращает URL-адрес.
Также Response
имеет метод getUrl()
, а также в обратном вызове.
Это, и вы также можете указать уровень журнала в соответствии с этим вопросом:
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.
Ответ 2
call.request().url()
, где call
- тип retrofit2.Call
.
Ответ 3
Да, вы можете включить ведение журнала отладки, вызвав setLogLevel()
в RestAdapter.
Я обычно устанавливаю logging на LogLevel.FULL
для отладочных построений следующим образом:
RestAdapter adapter = builder.setEndpoint("example.com")
.setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE)
.build();
Это автоматически распечатает всю информацию, связанную с вашими HTTP-запросами, включая URL-адрес, который вы нажимаете, заголовки и тело как запроса, так и ответа.