Android:停止将数据发送到服务器的线程

时间:2014-03-23 22:25:43

标签: java android multithreading

我目前正在进行一项耗时的项目,而且我遇到许多让我的生活变得非常困难的小困难...... 我向你提交了我的最后一个问题:我创建了一个线程来将数据发送到服务器以便将其放入数据库中。它工作但只是第一次,因为我的线程没有停止。

以下是代码:

threadHttp = new Thread(){
        @Override
        public void run(){
                try{
                    httpClient = new DefaultHttpClient();
                    httpPost = new HttpPost("http://www.seismdetector.info/reception.php");
                    nameValuePairs = new ArrayList<NameValuePair>(); // C'est la liste qui contiendra les couples champ/valeur
                    nameValuePairs.add(new BasicNameValuePair("test", "android"));
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    httpClient.execute(httpPost);
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }  
        }
    };

所以,当我点击按钮启动此线程一旦它没问题,但第二次应用程序崩溃,因为它无法启动仍在运行的线程。

我尝试过

这样的事情
if(threadHttp.isAlive())
    threadHttp.interrupt();

但它也不起作用。

提前多多感谢。

1 个答案:

答案 0 :(得分:0)

您应该使用AsyncTask类:

private class ExampleThread extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {}

    @Override
    protected void doInBackground(Void... params) {
        try{
            httpClient = new DefaultHttpClient();
            httpPost = new HttpPost("http://www.seismdetector.info/reception.php");
            nameValuePairs = new ArrayList<NameValuePair>(); // C'est la liste qui contiendra les couples champ/valeur
            nameValuePairs.add(new BasicNameValuePair("test", "android"));
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            httpClient.execute(httpPost);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }  
    }

    @Override
    protected void onPostExecute(Void... params) {}

}

启动帖子:

ExampleThread thread = new ExampleThread();
thread.execute();

停止线程:

thread.cancel();