Подтвердить что ты не робот

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);
                    }
                });
            }
4b9b3361

Ответ 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-адрес, который вы нажимаете, заголовки и тело как запроса, так и ответа.