2011-08-29 5 views
0

저는 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} 
+0

logcat에서 오류가 발생합니까? 네트워크에 액세스하는 코드를 보여줄 수 있습니까? –

+0

예외를 처리하지 않는 것 같습니다. 일반적으로 Throw되는 예외는 ClientProtocolException 및 IOException입니다. 또한 NullPointerException을 확인하고 어떤 객체가 null인지 알아 내려고합니다. 나는 당신이 처음에는 처리하지 않는다면 (Eclipse에서는) 컴파일 할 수 있다고 생각하지 않지만, 처리하지 않으면 마지막 컴파일은 잘 컴파일 될 것이다. – DeeV

+0

"이 서버에서 요청한 URL /getAvgScore1.php을 (를) 찾을 수 없습니다." 어디서 문제가 시작되는지. – CrackerJack9

답변

1

아마도 서버에 연결할 때 예외가 발생하면 예외를 잡을 수 있습니다. 현재 사용중인 코드를 게시해야합니다. 당신이 한 일을 볼 수 없으면, 우리는 무언가를 고칠 것인가를 무작위로 추측 할 수 있습니다.

+0

감사합니다. 위 코드를 게시했습니다. – BodyBuilder

0
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 값을 입력해야합니다. 필드에 대한 추가 정보는 here에 있습니다.

0

첫 번째 try 블록에 예외가 발생하는 경우 을 nullInputStream에 인스턴스화합니다. try/catch 블록을 하나만 만들거나 첫 번째 catch의 메서드를 제대로 종료하십시오.

관련 문제