簡體   English   中英

Android App強制關閉連接拒絕

[英]Android App force closes on connection refuse

我正在嘗試創建一個使用rest模板登錄的應用程序。 當tomcat啟動並與應用程序一起運行時,代碼可以正常工作。 當我停止tomcat時,應用程序拋出“連接拒絕異常”並且應用程序關閉。 我想要的是“如何處理異常以阻止應用程序關閉”。

在模擬器上,我收到消息“不幸的是,應用程序已關閉”

這是我的代碼。

public ResponseEntity login(String userName, String password) {

        final String url = getString(R.string.tm_user_service_uri)
                + "/users/authenticate?email=" + userName + "&password="
                + password;
        HttpAuthentication authHeader = new HttpBasicAuthentication(userName,
                password);
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAuthorization(authHeader);
        ResponseEntity<Object> response = null;
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        // Create a new RestTemplate instance
        RestTemplate restTemplate = new RestTemplate();

        // Add the String message converter
        restTemplate.getMessageConverters().add(
                new StringHttpMessageConverter());
        restTemplate.getMessageConverters().add(
                new MappingJackson2HttpMessageConverter());

        try {
            // Make the HTTP GET request to the Basic Auth protected URL
                    response = restTemplate.exchange(url,
                    HttpMethod.GET, requestEntity, Object.class);
            return response;
        } catch (HttpClientErrorException e) {
            Log.e("Network Error ", e.getLocalizedMessage(), e);
        }

        return response;
    }

我的堆棧跟蹤是

07-27 15:22:11.880: E/AndroidRuntime(1083): FATAL EXCEPTION: Thread-92
07-27 15:22:11.880: E/AndroidRuntime(1083): org.springframework.web.client.ResourceAccessException: I/O error: failed to connect to /10.0.2.2 (port 8080): connect failed: ECONNREFUSED (Connection refused); nested exception is java.net.ConnectException: failed to connect to /10.0.2.2 (port 8080): connect failed: ECONNREFUSED (Connection refused)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:491)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at com.teammatch.android.activities.MainActivity.login(MainActivity.java:144)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at com.teammatch.android.activities.MainActivity.tryLogin(MainActivity.java:71)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at com.teammatch.android.activities.MainActivity$1.run(MainActivity.java:60)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at java.lang.Thread.run(Thread.java:856)
07-27 15:22:11.880: E/AndroidRuntime(1083): Caused by: java.net.ConnectException: failed to connect to /10.0.2.2 (port 8080): connect failed: ECONNREFUSED (Connection refused)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.io.IoBridge.connect(IoBridge.java:114)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at java.net.Socket.connect(Socket.java:842)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:72)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:63)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:476)
07-27 15:22:11.880: E/AndroidRuntime(1083):     ... 6 more
07-27 15:22:11.880: E/AndroidRuntime(1083): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.io.Posix.connect(Native Method)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
07-27 15:22:11.880: E/AndroidRuntime(1083):     at libcore.io.IoBridge.connect(IoBridge.java:112)
07-27 15:22:11.880: E/AndroidRuntime(1083):     ... 23 more

我想要的是“如何處理異常以阻止應用程序關閉”。

為此Exception添加一個catch

try {
        // Make the HTTP GET request to the Basic Auth protected URL
                response = restTemplate.exchange(url,
                HttpMethod.GET, requestEntity, Object.class);
        return response;
    } catch (HttpClientErrorException e) {
        Log.e("Network Error ", e.getLocalizedMessage(), e);
    }
      catch (ConnectException e){
      // do your logging or print a message
      }

我不知道他們需要遵循什么順序,因此您可能需要進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM