这是我的问题......
public static String response = "";
public static String sendDataToServer(String data)
{
new Thread()
{
public void run()
{
//sending data to server
response = httpClient.execute(httppost, new BasicResponseHandler()).trim();
}
} .start();
return response;
}
当我调用此方法时,我得到空字符串作为响应。
String res = sendDataToServer("my_data"); //res is always empty string
//...XXXXXXX code after calling the method
在完成sendDataToServer()方法的执行之前,始终会执行XXXXX代码。为什么res总是空的?我如何获得正确的响应字符串?如何在执行sendDataServer()方法之前停止执行XXXX代码? 感谢。
答案 0 :(得分:5)
你可以这样做:
Thread t = new Thread() {
public void run() {
//sending data to server
response =
httpClient.execute(httppost, new BasicResponseHandler()).trim();
}
};
t.start();
t.join();
这样你就会等到线程结束然后再继续。
但是,请记住,在Android中等待线程完成是危险的,尤其是在UI线程(即主线程)中。但是,我假设这个线程不在UI线程中,因为否则AsyncTask
将是更好的解决方案(并且更原生)。
答案 1 :(得分:1)
你可以使用join()来等待一个线程,但是由于你的线程,以下内容做同样的事情。
public static String sendDataToServer(String data) {
//sending data to server
return httpClient.execute(httppost, new BasicResponseHandler()).trim();
}
答案 2 :(得分:1)
您可以使用CountDownLatch来同步线程执行。作为文档中的标记,CountDownLatch允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。如果启动sendDataToServer的线程是UI或主线程,那么这将导致应用程序的响应问题。提供更多细节。