如何使用 AsyncTask 的 onPostExecute 方法来更新 Android 中的变量



我试图在运行带有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();解决了问题(尝试,捕获(。谢谢。

最新更新