2012-04-23 56 views
0

我有一个方法,我打电话,但是,对于较新版本的Android它失败。显然,这是由于缺少线程。我的方法是发送一条消息到我的服务器。这是代码(SANS线程)在android中创建一个线程不工作

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"; 
     } 
    } 

现在,只是试图把一个线程它周围:

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(); 
} 

但是,这并不工作。我究竟做错了什么?另外,如果你注意到我打破了关于HttpClient的任何基本规则,请让我知道。

回答

1

更好的一个头,并使用AsyncTask的概念。

AsyncTask支持正确和方便地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。 请参阅本LINK样品实施

2

你的实现是不正确的 - 你不重写run()方法

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

拖车启动线程

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

嗯......我试图运行它但是,我在括号中出现错误。我不认为我正确使用你的答案。对不起,我对编程还很陌生。 – EGHDK 2012-04-23 03:50:40

+0

什么是错误? – 2012-04-23 04:07:52

+0

它说致命的例外:04-23 00:30:18.234:E/AndroidRuntime(29500):java.lang.RuntimeException:不能创建处理程序内部线程没有调用Looper.prepare() – EGHDK 2012-04-23 04:31:07

相关问题