簡體   English   中英

無法訪問服務器時程序關閉

[英]program close when failing to reach server

我是Android和編程領域的新手。 我建立了一個活動,該活動運行一個服務,該服務連接到PHP腳本以從服務器提取一些數據。 問題在於,當程序無法訪問服務器時,它會崩潰。 如何防止程序每次無法到達php腳本時崩潰? 謝謝。

代碼的相關部分:

private String getServerData(String returnString) {

      InputStream is = null;

      String result = "";


       try{
               HttpClient httpclient = new DefaultHttpClient();
               HttpPost httppost = new HttpPost(returnString);
               HttpResponse response = httpclient.execute(httppost);
               HttpEntity entity = response.getEntity();
               is = entity.getContent();

       }catch(Exception e){
               Log.e("log_tag", "Error in http connection "+e.toString());
       }

       //convert response to string
       try{
               BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
               StringBuilder sb = new StringBuilder();
               String line = null;
               while ((line = reader.readLine()) != null) {
                       sb.append(line + "\n");
                           }
               is.close();
               result=sb.toString();

           }catch(Exception e){
               Log.e("log_tag", "Error converting result "+e.toString());
       }

       return result; 

   }    

08-29 13:10:01.571: ERROR/AndroidRuntime(1116): <p>The requested URL /getAvgScore1.php was not found on this server.</p>
08-29 13:10:01.571: ERROR/AndroidRuntime(1116): <p>Additionally, a 404 Not Found
08-29 13:10:01.571: ERROR/AndroidRuntime(1116): error was encountered while trying to use an ErrorDocument to handle the request.</p>
08-29 13:10:01.571: ERROR/AndroidRuntime(1116): </body></html>
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:132)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:310)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at java.lang.Float.parseFloat(Float.java:327)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at java.lang.Float.valueOf(Float.java:368)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at iAndroid.RYCQ.rankservice.onCreate(rankservice.java:46)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2465)
08-29 13:10:01.571: ERROR/AndroidRuntime(1116):     ... 10 more
08-29 13:10:01.581: INFO/Process(583): Sending signal. PID: 1116 SIG: 3
08-29 13:10:01.581: INFO/dalvikvm(1116): threadid=7: reacting to signal 3
08-29 13:10:01.591: INFO/dalvikvm(1116): Wrote stack trace to '/data/anr/traces.txt'
08-29 13:10:10.634: WARN/ActivityManager(583): Launch timeout has expired, giving up wake lock!
08-29 13:10:10.634: WARN/ActivityManager(583): Activity idle timeout for HistoryRecord{436eed60 {iAndroid.RYCQ/iAndroid.RYCQ.finalresult}}
08-29 13:10:20.698: WARN/ActivityManager(583): Timeout executing service: ServiceRecord{437c8d88 iAndroid.RYCQ/.rankservice}

連接到服務器失敗時,可能只需要捕獲引發的任何異常即可。 但是,您需要發布當前正在使用的代碼。 無法看到您所做的事情,我們只能隨機猜測會解決什么問題。

    public static InputStream fetch(String urlString) throws MalformedURLException, IOException {
    HttpParams httpParameters = new BasicHttpParams();

    int timeoutConnection = 3000;
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);

    int timeoutSocket = 5000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
    HttpGet request = new HttpGet(urlString);
    HttpResponse response = httpClient.execute(request);
    return response.getEntity().getContent();
}

您必須放置timeoutConnection和timeoutSocket值,以使設備不會永遠等待響應。 有關字段的更多信息可在此處訪問。

如果在第一個try塊中引發了Exception,則可以在null InputStream上實例化BufferedReader 僅具有一個try/catch塊,或在第一個catch正確退出該方法。

暫無
暫無

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

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