有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从OnPostExecute 安卓获取返回值

首先,我要说的是,我读过:

How to get the return value from onpostexecute method in 安卓?

而且:

How do I return a boolean from AsyncTask?

没有帮助,也许我不明白他们在说什么。 这是我的问题: 我只需要返回OnPostExecute方法中的字符串值。 不是来自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字符串中的值分配给to max函数中的Fcur(公共字符串)

看起来很简单,但不知为什么我做不到


共 (1) 个答案

  1. # 1 楼答案

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

    创建一个可以在^{中调用的接口

    public interface ResponseCallback {
    
        void onRespond();
    }
    

    在调用asynckTask之前,请这样定义:

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

    然后把callback传递给asynckTaskconstructor并调用onPostExecute


    当然,您可以根据需要修改interface的签名