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);
}
});
}
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.
call.request().url()
、ここでcall
はretrofit2.Call
のタイプです。
はい。RestAdapterでsetLogLevel()
を呼び出すことにより、デバッグログを有効にできます。
私は通常、次のようにデバッグビルドのロギングを LogLevel.FULL
に設定します。
RestAdapter adapter = builder.setEndpoint("example.com")
.setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE)
.build();
これにより、ヒットしたURL、ヘッダー、リクエストとレスポンスの両方の本文など、HTTPリクエストに関連するすべての情報が自動的に出力されます。