Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java okhttp-拦截器-停止将非致命异常记录到Crashlytics_Java_Android_Retrofit2_Interceptor_Okhttp - Fatal编程技术网

Java okhttp-拦截器-停止将非致命异常记录到Crashlytics

Java okhttp-拦截器-停止将非致命异常记录到Crashlytics,java,android,retrofit2,interceptor,okhttp,Java,Android,Retrofit2,Interceptor,Okhttp,我在安卓应用程序中使用改型,这反过来意味着我在使用OkHttp。 我刚刚访问了Alpha,在我的crashlytics报告中看到一些非致命异常被记录。 所有这些都源于我的okhttp拦截器,然后记录的异常似乎在网络不稳定或连接中断等情况下都是有效的 我如何才能使这些异常不会注销到crashlytics,从而扰乱我对应用程序中发生的异常的看法 例外情况的一些例子: > Non-fatal Exception: javax.net.ssl.SSLHandshakeException Conn

我在安卓应用程序中使用改型,这反过来意味着我在使用OkHttp。 我刚刚访问了Alpha,在我的crashlytics报告中看到一些非致命异常被记录。 所有这些都源于我的okhttp拦截器,然后记录的异常似乎在网络不稳定或连接中断等情况下都是有效的

我如何才能使这些异常不会注销到crashlytics,从而扰乱我对应用程序中发生的异常的看法


例外情况的一些例子:

> Non-fatal Exception: javax.net.ssl.SSLHandshakeException
Connection closed by peer
okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:281)
okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:251)
okhttp3.internal.connection.RealConnection.connect (RealConnection.java:151)
okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:192)
okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:121)
okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:100)
okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:120)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
MY_INTERCEPTOR.intercept (AuthenticationInterceptor.java:30)

这是我的拦截器代码:

@Override
public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();
    Response response = chain.proceed(request);

    if( response.code() == HTTP_AUTHENTICATION_ERROR_CODE ){
        Intent intent = new Intent(ACTION_LOGOUT_ACTION);
        mContext.sendBroadcast(intent);
    }
    return response;
}

我知道我可以从“继续”调用中捕获任何IOException,但这不会打乱OkHttp对网络错误等的正确处理吗?

在调用
Crashlytics时会记录非致命异常。logException(Exception)
在代码中显式记录

请阅读以下资料:

Crashlytics
for Android允许您在应用程序的捕获块中记录捕获的异常!要使用此功能,只需向catch块添加对
Crashlytics.logException(Exception)
的调用:

try {
  myMethodThatThrows();
} catch (Exception e) {
  Crashlytics.logException(e);
  // handle your exception here! 
}
所有记录的异常将在Crashlytics仪表板中显示为“非致命”问题。您的问题摘要将包含您用于从崩溃中获取的所有状态信息,以及Android版本和硬件设备的故障

当您使用时,Crashlytics仅存储非致命异常 logException(),请参阅下面的截取器代码,它正在抛出 IOException,但异常在非致命的仪表板上不可见 异常部分,但我们不记录它

因此,如果要在非致命异常下记录异常,只需使用Crashlytics.logException()


和Crashlytics仅存储给定应用程序会话中最近的8个异常。如果您的应用程序在一个会话中抛出8个以上的异常,则旧的异常将丢失。

只需在您的代码库中搜索
Crashlytics.logException
,您肯定会在某个地方找到它。它只是从那里被记录下来的

否则
Response-Response=chain上出现任何异常将导致应用程序崩溃:)

Wild guess:),您可能正在使用RxJava&在订阅服务器的
onError(throwable:throwable)
中,您可能会像下面这样记录它

override fun onError(throwable: Throwable) {
       Crashlytics.logException(throwable) 
}

Crashlytics日志是否在没有此拦截器的情况下仍然显示?IIRC Crashlytics通常不会记录非致命异常,因此您似乎在代码库中的某个位置调用了
Crashlytics.logException
,你应该在那里过滤你的异常。我没有在OkHttp拦截器中显式调用log exception,这是crashlytics引发和捕获异常的地方。我没有在OkHttp拦截器中显式调用log exception,这是crashlytics引发和捕获异常的地方。那么,我可能会进行改进在内部调用时,发现在更高的级别上出现了一个木材日志,但是很难跟踪,因为拦截器是我们代码中唯一显示在堆栈跟踪中的部分。但是是的,看来我们打电话给logexception,谢谢你提供的信息
@Override 
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();

long t1 = System.nanoTime();
logger.info(String.format("Sending request %s on %s%n%s",
    request.url(), chain.connection(), request.headers()));

Response response = chain.proceed(request);

long t2 = System.nanoTime();
logger.info(String.format("Received response for %s in %.1fms%n%s",
    response.request().url(), (t2 - t1) / 1e6d, response.headers()));

return response;
} 
override fun onError(throwable: Throwable) {
       Crashlytics.logException(throwable) 
}