web-dev-qa-db-fra.com

Retrofit @GET - comment afficher la chaîne de requête?

Je travaille sur une application Android qui utilise Retrofit pour créer un client reposant. Afin de déboguer les appels réseaux, je voudrais afficher ou vider l'URL qui est réellement invoquée. Existe-t-il un Comment faire? J'ai inclus un code ci-dessous qui montre comment l'application utilise actuellement la rénovation.

Définition de l'interface client:

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 

}

Service qui utilise le client généré:

// 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);
                    }
                });
            }
19
Jack BeNimble

RetrofitError possède une méthode getUrl() qui renvoie l'URL.

La Response possède également une méthode getUrl() dans le rappel.

Cela, et vous pouvez également spécifier le niveau de journalisation selon cette question :

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

Bien que basé sur docs , LogLevel.BASIC devrait faire ce dont vous avez besoin.

BASIC
Log only the request method and URL and the response status code and execution time.
8
EpicPandaForce

call.request().url(), où call est le type de retrofit2.Call.

46

Oui, vous pouvez activer la journalisation du débogage en appelant setLogLevel() sur votre RestAdapter.

Je règle généralement la journalisation sur LogLevel.FULL pour les versions de débogage comme ceci:

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

Cela imprimera automatiquement toutes les informations associées à vos demandes HTTP, y compris l'URL que vous frappez, les en-têtes et le corps de la demande et de la réponse.

5
Tanis.7x