我试图在运行带有AsyncTask
的背景任务后更新一个变量,以实现背景任务的结果。变量更新,但显然不准时。我用来显示服务器响应的吐司首先显示一个空吐司,然后第二次不空烤面包(因为按时收到的响应是需要的(。
在发布代码之前,我需要指出,如果我在UI线程上运行代码的替代版本(在UI线程上强制连接(,则没有任何问题。该变量随着该变量而更新。
String databaseCheckResult = "";
private class AsyncCheckIfExists extends AsyncTask<String, Integer, String> {
String result = null;
@Override
protected void onPreExecute(){
}
@Override
protected String doInBackground(String... formValues) {
try {
URL url = new URL(formValues[1]);
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches (false);
String urlParameters = "date=" + formValues[0];
byte[] postData = urlParameters.getBytes("UTF-8");
OutputStream os = conn.getOutputStream();
os.write(postData);
os.flush();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// success, get result from server
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
conn.disconnect();
result = response.toString();
return result;
} else {
// error
//TODO: let the user know that something is wrong with the network
}
} catch (java.io.IOException e) {
//TODO: prevent app from crashing
}
} catch (java.net.MalformedURLException e){
//TODO: prevent app from crashing
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress){
}
@Override
protected void onPostExecute(String message){
databaseCheckResult = message;
}
}
我使用:
AsyncCheckIfExists check = new AsyncCheckIfExists();
check.execute(date, "http://www.webaddress.com/script.php");
@ADM,我已经使用您在您提供的链接中找到的方法修复了它(我真的应该阅读更多(。
databaseCheckResult = check.execute(date, "http://www.webaddress.com/script.php").get();
解决了问题(尝试,捕获(。谢谢。