2015-05-06 5 views
13

Ich arbeite an einer Android-Anwendung, die Retrofit verwendet, um einen erholsamen Client zu erstellen. Um Netzwerkaufrufe zu debuggen, möchte ich die URL anzeigen oder ausgeben lassen, die tatsächlich aufgerufen wird. Gibt es eine Möglichkeit, dies zu tun? Ich habe unten einen Code eingefügt, der zeigt, wie die App derzeit mit Retrofit arbeitet.@GET nachrüsten - wie wird der Anfrage-String angezeigt?

Client-Interface-Definition:

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 

} 

Dienst, der Client generiert verwendet:

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

Antwort

7

RetrofitError hat eine getUrl() Methode, die die URL zurückgibt.

Auch die Response hat eine getUrl() Methode innerhalb des Rückrufs.

Das, und Sie können auch die Protokollebene gemäß this question angeben:

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

Obwohl auf der Grundlage der docs, LogLevel.BASIC tun sollten, was Sie brauchen.

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

Danke! Ich wünschte, ich könnte beide Antworten akzeptieren. –

+1

Ich habe ihn aufgewertet, es ist fair: D froh, ich könnte helfen – EpicPandaForce

5

Ja, können Sie die Debug-Protokollierung aktivieren, indem setLogLevel() auf Ihrem RestAdapter aufrufen.

I baut typischerweise Protokollierung für Debug LogLevel.FULL gesetzt wie so:

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

Dies wird automatisch alle Informationen auszudrucken, die mit Ihren HTTP-Anforderungen, einschließlich der URL, die Sie schlagen, die Header und die Körper sowohl der Anfrage als auch der Antwort.

+0

Danke - tolle Information. –

32

call.request().url(), wobei call vom Typ retrofit2.Call ist.

Verwandte Themen