0

呼び出しているメソッドがありますが、新しいバージョンの 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 に関する Android の基本的な規則に違反していることに気付いた場合は、お知らせください。

4

2 に答える 2

2

あなたの実装は正しくありません - run() メソッドをオーバーライドしていません

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

スレッドを開始する

SendThread sendThread  = new SendThread();
sendThread.start();
于 2012-04-23T03:31:56.383 に答える
1

頭に入れ、 AsyncTask の概念を使用することをお勧めします。

AsyncTask を使用すると、UI スレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作することなく、バックグラウンド操作を実行し、UI スレッドで結果を公開できます。サンプル実装については、このリンクを参照してください

于 2012-04-23T03:02:45.407 に答える