2012-04-23 5 views
0

나는 전화 할 방법이 있지만 최신 안드로이드 버전에서는 실패한다. 분명히 이것은 스레딩 부족 때문입니다. 내 방법은 내 서버에 메시지를 보내는 것입니다.android에서 쓰레드가 작동하지 않는다.

public String sendMessage(String username, Editable message){ 
     BufferedReader in = null; 
     String data = null; 
Thread sendThread = new Thread(){ 
     try{ 
      DefaultHttpClient client = new DefaultHttpClient(); 
      URI website = new URI("http://thenjtechguy.com/njit/gds/user_send.php?username="+username+"&message="+message); 

      HttpPost post_request = new HttpPost(); 
      post_request.setURI(website); 


      HttpGet request = new HttpGet(); 

      request.setURI(website); 
      //executing actual request 
      HttpResponse response = client.execute(request); 

      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String l = ""; 
      String nl = System.getProperty("line.separator"); 
      while ((l = in.readLine()) != null) { 
       sb.append(l); 

      } 
      in.close(); 
      data = sb.toString(); 
      return data; 
     }catch (Exception e){ 
      return "ERROR"; 
     } 
} sendThread.start(); 
} 

을하지만 그것은 작동하지 않습니다 이것은 단지 주위에 실을 넣어하려고, 이제 코드 (스레딩 산세)

public String sendMessage(String username, Editable message){ 
     BufferedReader in = null; 
     String data = null; 

     try{ 
      DefaultHttpClient client = new DefaultHttpClient(); 
      URI website = new URI("http://abc.com/user_send.php?username="+username+"&message="+message); 

      HttpPost post_request = new HttpPost(); 
      post_request.setURI(website); 


      HttpGet request = new HttpGet(); 

      request.setURI(website); 
      //executing actual request 
      HttpResponse response = client.execute(request); 

      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String l = ""; 
      String nl = System.getProperty("line.separator"); 
      while ((l = in.readLine()) != null) { 
       sb.append(l); 

      } 
      in.close(); 
      data = sb.toString(); 
      return data; 
     }catch (Exception e){ 
      return "ERROR"; 
     } 
    } 

입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 또한, HttpClient와 관련하여 안드로이드의 기본 규칙을 위반 한 사실을 알게되면 알려 주시기 바랍니다.

답변

1

더 나은 머리와 AsyncTask 개념을 사용하십시오.

AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스는 백그라운드 작업을 수행하고 스레드 및/또는 핸들러를 조작하지 않고도 UI 스레드에서 결과를 게시 할 수있게합니다. 샘플 구현이 LINK을 참조하십시오

2

귀하의 구현이 올바르지 않습니다 - 당신이 실행을 무시하지 않았다() 메소드

class SendThread extends Thread { 
    public void run(){ 
     //add your implementation here 
    } 
} 

견인 스레드가

SendThread sendThread = new SendThread(); 
sendThread.start(); 
+0

흠 ... 나는 그것을 실행 시도 시작 하지만, 대괄호에 오류가 발생합니다. 나는 당신의 대답을 올바르게 사용하고 있다고 생각하지 않습니다. 죄송합니다. 아직 프로그래밍을 처음 접했습니다. – EGHDK

+0

무엇이 오류입니까? –

+0

그것은 치명적인 예외가 : 04-23 00 : 30 : 18.234 : E/AndroidRuntime (29500) : java.lang.RuntimeException : Looper.prepare()를 호출하지 않은 스레드 내부에서 처리기를 만들 수 없습니다 – EGHDK

관련 문제