2.3.3

2012-11-17 6 views
1

가능한 중복에 4.0 및 4.1하지만에() 예외를 연결 HttpURLConnection의 : 나는 안드로이드 응용 프로그램에서 일하고 있어요
Android app doesn’t work on Android 42.3.3

. 몇 시간 동안 해결책을 찾으려고 노력했습니다. 내 응용 프로그램은 에뮬레이터 2.3.3을 실행 중일 때 데이터베이스 및 서버와 잘 작동하지만 4.0 또는 4.1 또는 2.3.3 이상의 버전에서는 실행되지 않습니다. 응용 프로그램이이 메서드에서 예외를 throw합니다 : 예외가 발생하려고 할 때 connection.connect(); 도와주세요.

public void sendOutputLine(URL url, String outputLine) { 
    try { 
     connection = (HttpURLConnection) url.openConnection(); 
     Log.d(LogInActivity.DEBUG_TAG, "1"); 
     connection.setDoInput(true); 
     Log.d(LogInActivity.DEBUG_TAG, "2");  
     connection.setDoOutput(true); 
     Log.d(LogInActivity.DEBUG_TAG, "3");  
     connection.setRequestMethod("POST"); 
     Log.d(LogInActivity.DEBUG_TAG, "4");  
     connection.setFixedLengthStreamingMode(outputLine.length()); 
     Log.d(LogInActivity.DEBUG_TAG, "5");  
     connection.connect(); 
     Log.d(LogInActivity.DEBUG_TAG, "6");  
     out = connection.getOutputStream(); 
     PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); 
     pw.print(outputLine); 
     pw.flush(); 
     out.close(); 
    } catch (SocketTimeoutException e) { 
     Log.d(LogInActivity.DEBUG_TAG, 
       "SocketTimeoutException sendOutputLine(): " + e.getMessage());   
    } catch (ProtocolException e) { 
     Log.d(LogInActivity.DEBUG_TAG, 
       "Protocol exception sendOutputLine(): " + e.getMessage()); 
    } catch (IOException e) { 
     Log.d(LogInActivity.DEBUG_TAG, "IO exception sendOutputLine(): " 
       + e.getMessage()); 
    } catch (Exception e) { 
     Log.d(LogInActivity.DEBUG_TAG, 
       "Exception bommed client: " + e.getMessage()); 
    } 
} 

로그 캣 :

11-17 13:19:11.710: D/SocialFamilyTree(847): outputLint: Login%[email protected]%57963634 
11-17 13:19:11.710: D/SocialFamilyTree(847): 1 
11-17 13:19:11.710: D/SocialFamilyTree(847): 2 
11-17 13:19:11.710: D/SocialFamilyTree(847): 3 
11-17 13:19:11.710: D/SocialFamilyTree(847): 4 
11-17 13:19:11.710: D/SocialFamilyTree(847): 5 
11-17 13:19:11.740: D/SocialFamilyTree(847): Exception bommed client: null 

편집 : 내가보고, 그래서 나는이 작업을 위해 AsyncTask을 어떻게 사용합니까 AsyncTask

를 사용할 필요가 ? 이 방법에 의해

답변

0

사용 AsyncTask를 ...

public class getConnection extends AsyncTask<String, Void, Void> 
    { 


      @Override 
      protected void onPreExecute() 
      { 
       super.onPreExecute(); 
       Utils.clearDialogs(); 
       Utils.showActivityViewer(Mainctivity.this); 
      } 

      @Override 
      protected Void doInBackground(String... arg0) 
      { 

      try 
      { 
        connection = (HttpURLConnection) url.openConnection(); 

        Log.d(LogInActivity.DEBUG_TAG, "1"); 
        connection.setDoInput(true); 
        Log.d(LogInActivity.DEBUG_TAG, "2");  
        connection.setDoOutput(true); 
        Log.d(LogInActivity.DEBUG_TAG, "3");  
        connection.setRequestMethod("POST"); 
        Log.d(LogInActivity.DEBUG_TAG, "4");  
        connection.setFixedLengthStreamingMode(outputLine.length()); 
        Log.d(LogInActivity.DEBUG_TAG, "5");  
        connection.connect(); 
        Log.d(LogInActivity.DEBUG_TAG, "6");  
        out = connection.getOutputStream(); 
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); 
        pw.print(outputLine); 
        pw.flush(); 
        out.close(); 
      } 
      catch (Exception e) 
      { 
      e.printStackTrace(); 
      } 

      return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) 
      { 
       super.onPostExecute(result); 
       Utils.hideActivityViewer(); 

      } 
      catch (Exception e) 
      { 
      Log.v("log", e.toString()); 
      } 
      } 

      } 
+0

** Utils **는 어디에서 왔습니까? –

+0

이것은 클래스입니다 ... 내 진도 대화 상자의 표시 및 숨기기 기능을 선언했습니다. –

0

그냥 맹목적으로 예외를 캐치하지 마십시오. 오류를 숨김으로써 전체 문제를 숨기고 있습니다. 추측해야만한다면 NetworkOnMainThreadException이 발생했다는 말을 들었을 것입니다. 백그라운드 스레드에서 실행하고 있지는 않을 것이므로 제공 한 정보로 말할 수는 없기 때문입니다.

AsyncTask는 NetworkOnMainThreadException 문제를 해결하기위한 하나의 방법이지만, 유일한 방법은 아니며 실제로 문제가 있다는 증거는 없습니다.

관련 문제