我目前正在进行一项耗时的项目,而且我遇到许多让我的生活变得非常困难的小困难...... 我向你提交了我的最后一个问题:我创建了一个线程来将数据发送到服务器以便将其放入数据库中。它工作但只是第一次,因为我的线程没有停止。
以下是代码:
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();
但它也不起作用。
提前多多感谢。
答案 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();