从OnPostExecute android

时间:2017-04-09 12:49:59

标签: java android android-asynctask return return-value

首先,我必须说,我读过这个:

How to get the return value from onpostexecute method in android?

那:

How do I return a boolean from AsyncTask?

没有任何帮助,也许我不明白他们在说什么。 这是我的问题: 我只需要取回我的OnPostExecute方法中的String值。 不是来自doInBackground,我需要从我的OnPostExecute。

我的代码:

 public void max(String build,String cls)
{

    BackgroundTask3 myTask = new BackgroundTask3();
    myTask.execute(build,cls);


    Toast.makeText(getApplicationContext(),"fcur is" + Fcur,Toast.LENGTH_LONG).show();

}

public class BackgroundTask3 extends AsyncTask<String,Void,String>
{

    String capacity_url;
    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result) {
    String finalValue;
      json_capacity = result;
        finalValue=parseMax();
        Toast.makeText(getApplicationContext(),"finalValue is" + finalValue,Toast.LENGTH_LONG).show();
        super.onPostExecute(result);

    }

    @Override
    protected void onPreExecute() {
        capacity_url = "http://www.skedge.co.il/ANCurrentCapacity.php";
    }

    @Override
    protected String doInBackground(String... params) {
        String cls,build;
        build= params[0];
        cls = params[1];

        try {
            URL url = new URL (capacity_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
            String data_string = URLEncoder.encode("Fclass","UTF-8")+"="+URLEncoder.encode(cls,"UTF-8")+"&"+
                    URLEncoder.encode("building","UTF-8")+"="+URLEncoder.encode(build,"UTF-8")+"&"+
                    URLEncoder.encode("hour","UTF-8")+"="+URLEncoder.encode(hour,"UTF-8");
            bufferedWriter.write(data_string);
            bufferedWriter.flush();
            bufferedWriter.close();
            //here is the new
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
            StringBuilder stringBuilder = new StringBuilder();
            while ((JSON_STRING = bufferedReader.readLine())!= null)
            {
                stringBuilder.append(JSON_STRING+"\n");
            }
            outputStream.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return stringBuilder.toString().trim();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;

    }
}

我想做的就是: 将OnPostExecute中finalValue String中的值赋给最大函数内部的Fcur(public String)。

看起来很简单,但由于某种原因,我无法完成它。

1 个答案:

答案 0 :(得分:2)

从后台线程获取回调的最佳方法是使用interfaces作为AsyncTask的回调,例如:

创建一个可以在onPostExecute()

中调用的界面
public interface ResponseCallback {

    void onRespond();
}

并在调用asynckTask之前定义它:

   ResponseCallback callback = new ResponseCallback() {
            @Override
            public void onRespond() {
              //code to be done after calling it from onPostExecute
            }
        };

并将callback传递给constructor的{​​{1}}并在asynckTask

中调用它

当然,您可以将onPostExecute的签名修改为您想要的内容。