Java 从OnPostExecute获取返回值

Java 从OnPostExecute获取返回值,java,android,android-asynctask,return,return-value,Java,Android,Android Asynctask,Return,Return Value,首先,我要说的是,我读过: 而且: 没有帮助,也许我不明白他们在说什么。 这是我的问题: 我只需要返回OnPostExecute方法中的字符串值。 不是从doInBackground来的,我需要从OnPostExecute来的 我的代码: public void max(String build,String cls) { BackgroundTask3 myTask = new BackgroundTask3(); myTask.execute(build,cls);

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

而且:

没有帮助,也许我不明白他们在说什么。 这是我的问题: 我只需要返回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();

}
以及:

公共类BackgroundTask3扩展了异步任务
{
字符串容量\uURL;
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串结果){
字符串最终值;
json_容量=结果;
finalValue=parseMax();
Toast.makeText(getApplicationContext(),“finalValue为”+finalValue,Toast.LENGTH_LONG).show();
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
容量\u url=”http://www.skedge.co.il/ANCurrentCapacity.php";
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串cls,构建;
build=params[0];
cls=参数[1];
试一试{
URL URL=新URL(容量\ URL);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod(“POST”);
httpURLConnection.setDoOutput(true);
OutputStream OutputStream=httpURLConnection.getOutputStream();
BufferedWriter BufferedWriter=新的BufferedWriter(新的OutputStreamWriter(outputStream,UTF-8));
字符串数据\u String=URLEncoder.encode(“Fclass”、“UTF-8”)+“=”+URLEncoder.encode(cls,“UTF-8”)+“&”+
URLEncoder.encode(“构建”、“UTF-8”)+“=”+URLEncoder.encode(构建,“UTF-8”)+“&”+
urlcoder.encode(“小时”,“UTF-8”)+“=”+urlcoder.encode(小时,“UTF-8”);
bufferedWriter.write(数据字符串);
bufferedWriter.flush();
bufferedWriter.close();
//这是新的
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream,“UTF-8”));
StringBuilder StringBuilder=新的StringBuilder();
而((JSON_STRING=bufferedReader.readLine())!=null)
{
追加(JSON_字符串+“\n”);
}
outputStream.close();
inputStream.close();
httpURLConnection.disconnect();
返回stringBuilder.toString().trim();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}
我想做的就是: 将OnPostExecute中finalValue字符串中的值分配给to max函数中的Fcur(公共字符串)


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

从后台线程获取回调的最佳方法是使用
接口
作为来自
异步任务
的回调,例如:

创建一个可以在
onPostExecute()中调用的接口

在调用asynckTask之前,请按如下方式定义它:

   ResponseCallback callback = new ResponseCallback() {
            @Override
            public void onRespond() {
              //code to be done after calling it from onPostExecute
            }
        };
并将
回调
传递给
异步任务的
构造函数
,并在
onPostExecute中调用它

public interface ResponseCallback {

    void onRespond();
}


当然,您可以根据需要修改
接口的签名。

我也利用了这一点,因为“作为接口思考”是实现对asyncTask回调响应的更好方法。@Yarden Rotem,尝试以下方法:
   ResponseCallback callback = new ResponseCallback() {
            @Override
            public void onRespond() {
              //code to be done after calling it from onPostExecute
            }
        };