web-dev-qa-db-ja.com

改造@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);
                    }
                });
            }
19
Jack BeNimble

RetrofitErrorには、URLを返すgetUrl()メソッドがあります。

また、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.
8
EpicPandaForce

call.request().url()、ここでcallretrofit2.Callのタイプです。

46

はい。RestAdapterでsetLogLevel()を呼び出すことにより、デバッグログを有効にできます。

私は通常、次のようにデバッグビルドのロギングを LogLevel.FULL に設定します。

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

これにより、ヒットしたURL、ヘッダー、リクエストとレスポンスの両方の本文など、HTTPリクエストに関連するすべての情報が自動的に出力されます。

5
Tanis.7x