2012-04-23 3 views
0

У меня есть метод, который я вызываю, но для более новых версий Android он терпит неудачу. По-видимому, это связано с отсутствием резьбы. Мой метод - отправить сообщение на мой сервер. Это код (без резьбы)Создание потока в 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(); 
} 

Но это не работает. Что я делаю не так? Кроме того, если вы заметили, что я нарушаю фундаментальные правила в android относительно HttpClient, пожалуйста, дайте мне знать.

ответ

1

Лучше голову и использовать AsyncTask концепции.

AsyncTask обеспечивает правильное и простое использование нити пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками. см это 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

Смежные вопросы