Android – 在 OkHttp 中启用日志记录

在您的 Android 应用程序中执行 API 请求时,您是否遇到过负面体验?或者您可能遇到了导致 API 调用无效的错误。

你做了什么尝试?

第一种选择是通过一些客户端尝试 API 请求以找出问题所在。或者也许你会尝试一些不同的东西。如果我们告诉您,您可以选择不同的东西,不会迫使您通过客户端测试 API,那会怎样?

极客提示:您可以在 Android 代码中使用拦截器来获取问题发生时的日志。这不是更好的解决方案吗?

OkHttp 到底是什么?

OkHttp 是一个拦截器,允许您报告 API 请求。因此,在这种情况下,拦截器的功能更像是 API 请求的管理器,允许您监视或执行 API 调用上的某些操作。让我们首先将它包含在我们的项目中;在build.gradle文件中,我们将包括以下内容:

implementation "com.squareup.okhttp3:logging-interceptor:4.0.0"

然后,为了开始跟踪您的 API 调用,我们必须首先执行 API 请求。

  • 科特林

val geeksforgeeks = OkHttpClient.Builder()
var demands = Request.Builder()
        .url(/*Your API key which you generated*/)
        .build()

现在,在本节中,我们为请求构建一个对象并定义 OkHttpClient 的变量 client。 

因此,为了发出 API 请求,我们将需要以下代码:

  • 科特林

geeksforgeeks.newCall(request).enqueue(object :Callback{
    override fun onFailure(request: Request?, e: IOException?) {
        // The API Call Failed
          // Do something like changing
          // the UI to prompt user
    }
    override fun onResponse(response: Response?) {
        // Response returned from the API
          // So something from it.
    }
})

我们刚刚进行了第一次 API 调用。但是,我们不会看到任何日志,因为我们没有安装任何拦截器来记录调用。那么,我们如何记录呼叫的响应呢?

要开始记录,我们必须在前面描述的 OkHttpClient 中包含拦截器。

而且,如前所述,拦截器用于监控 API 请求,并将发布在控制台的 Logcat 中创建的日志。要包含一个拦截器:

  • 科特林

val aLogger = HttpLoggingInterceptor()
aLogger.level = (HttpLoggingInterceptor.Level.BASIC)

而且,为了在我们使用的客户端中包含这个拦截器:

  • 科特林

val geeksforgeeks = OkHttpClient.Builder()
geeksforgeeks.addInterceptor(logging)

现在,当我们再次访问 API 时,我们将在Logcat 中获得如下所示的日志:

--> POST /hello world/http/1.1(6 字节正文)

<-- 600 OK (10ms, 4-byte body)

一些注意事项

注意#1:要为您的或日志添加自定义标签,只需输入以下内容,

  • 科特林

val aLogger = HttpLoggingInterceptor(object : Logger() {
    fun aLogger(textString: String) {
        Log.d("GEEKS FOR GEEKS", textString)
    }
})

注意#2:你也可以扩展 Interceptor 类来构建你自己的 Interceptor。

  • 科特林

class GeeksforGeeksInterceptor : Interceptor {
    override fun gfgInter(chain: Interceptor.Chain): Response {
        var geeksforgeeks = chain.request()
        geeksforgeeks = request.newBuilder()
                .build()
        return chain.proceed(request)
    }
}

然后使用以下命令将其添加到客户端列表中:

  • 科特林

val geeksforgeeks = OkHttpClient.Builder()
geeksforgeeks.addInterceptor(CustomInterceptor())

结论

在上面的示例中,redactHeader 隐藏了 Authorization 和 Cookie 密钥的敏感信息。这些仅在 HEADERS 和 BODY 级别创建。这就是我们可以跟踪在您的 Android 应用程序中执行的 API 调用的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可能是你的代码出现了一些错误,或者是缺少一些必要的依赖库。以下是一些可能导致该错误的常见原因和解决方案: 1. 没有添加Okhttp的依赖库:在你的build.gradle文件添加以下依赖: ``` implementation 'com.squareup.okhttp3:okhttp:3.14.9' ``` 2. 没有添加网络权限:在你的AndroidManifest.xml文件添加以下代码: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 3. 没有在主线程执行网络操作:Okhttp默认是在后台线程执行网络操作,如果你需要在主线程执行网络操作,可以使用Okhttp的enqueue()方法,例如: ``` OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://www.example.com") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 处理错误 } @Override public void onResponse(Call call, Response response) throws IOException { // 处理响应 } }); ``` 4. 没有在AndroidManifest.xml添加android:usesCleartextTraffic属性:如果你的应用程序需要使用明文http请求,需要在AndroidManifest.xml添加以下代码: ``` <application android:usesCleartextTraffic="true" ...> ... </application> ``` 5. 混淆规则错误:如果你使用了混淆,需要在你的proguard-rules.pro文件添加以下代码: ``` -dontwarn okhttp3.** -keep class okhttp3.** { *; } -keep interface okhttp3.** { *; } ``` 希望以上解决方案能够帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值