当前位置: 首页 > 知识库问答 >
问题:

改造2:捕获连接超时异常

詹高畅
2023-03-14

我有以下设置:

final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(5, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(5, TimeUnit.SECONDS);

RestAdapter.Builder builder = new RestAdapter.Builder()
        .setEndpoint(ROOT)
        .setClient(new OkClient(okHttpClient))
        .setLogLevel(RestAdapter.LogLevel.FULL);

我正在尝试处理服务器关闭,用户出现连接超时异常的情况,这是我的日志记录:

java.net.SocketTimeoutException: failed to connect to /192.168.0.53 (port 3000) after 5000ms

完整日志记录:http://pastebin.com/gscCGb7x

有没有办法将其转化为改造失败的方法,这样我就可以在那里处理它?

提前感谢!

共有3个答案

闾丘鸣
2023-03-14

如果有人在静态编程语言/协程中遇到同样的问题,请在协程范围中添加错误处理程序:

CoroutineScope(Dispatchers.IO).launch(handler) {

而处理程序本身看起来像:

val handler = CoroutineExceptionHandler { _, exception ->
    Log.t("Network", "Caught $exception")
}
公良凯
2023-03-14
@Override
public void onFailure(Call call, Throwable t) {
    if(t instanceof SocketTimeoutException){
        message = "Socket Time out. Please try again.";
    }
}
东门佐
2023-03-14

用于改装2

web服务实例中定义侦听器:

public interface OnConnectionTimeoutListener {
    void onConnectionTimeout();
}

向Web服务添加拦截器:

public WebServiceClient() {
    OkHttpClient client = new OkHttpClient();
    client.setConnectTimeout(10, TimeUnit.SECONDS);
    client.setReadTimeout(30, TimeUnit.SECONDS);
    client.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            return onOnIntercept(chain);
        }
    });
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
    webService = retrofit.create(WebService.class);
}

用try-catch块括住intercep代码,并在异常发生时通知侦听器:

private Response onOnIntercept(Chain chain) throws IOException {
    try {
        Response response = chain.proceed(chain.request());
        String content = UtilityMethods.convertResponseToString(response);
        Log.d(TAG, lastCalledMethodName + " - " + content);
        return response.newBuilder().body(ResponseBody.create(response.body().contentType(), content)).build();
    }
    catch (SocketTimeoutException exception) {
        exception.printStackTrace();
        if(listener != null)
            listener.onConnectionTimeout();
    }

    return chain.proceed(chain.request());
}
 类似资料:
  • 代码片段如下所示: 如果有人有决议,请帮忙?

  • 我相对来说是android开发的新手。我正在开发一个android应用程序,向web服务器发送请求并解析JSON对象。在与服务器通信时,我经常收到< code > Java . net . socket time out exception:Connection timed out 异常。有时它会完美地工作,没有任何问题。我知道这个问题已经被问过很多次了。但仍然,我没有得到任何满意的解决这个问题的

  • 我在尝试使用Apache HttpClient 3.0通过Java代码连接和查询Rally时遇到了超时问题 他们运行的是java JDK1.6。 }}

  • 一些背景: 我有一个使用3G或4G数据连接的Android应用程序。但它也连接到一个wifi热点,以便在热点设备和应用程序之间传输一些数据。 我想做的是:创建一个到这个wifi热点的套接字连接,并通过这个套接字发送/接收数据。 我添加了以下代码,以确保我们在创建套接字时使用wifi热点wifi(否则它有时最终会使用数据连接): 这似乎没问题。但是,我在尝试连接到远程服务器地址时发现问题。下面是我正

  • 我得到错误,而建立gradle(IDE工具版本3.1.3Android)Android版本: 3.1.3 gradle版本: 4.4无法下载文件下面时gradle同步下载https://jcenter.bintray.com/com/android/tools/build/gradle/3.1.3/gradle-3.1.3.pom21秒215毫秒 下载https://dl.google.com/d

  • 问题内容: 我试过了 在主方法中,在start(Stage primaryStage)方法中也是如此。它没有用。 我也试过 异常堆栈跟踪。 在javafx.concurrent.Task $ TaskCallable $ 2.run(Task.java:1251)在com.sun.javafx.application.PlatformImpl $ 3.run(PlatformImpl.java:1