AsynTask完成工作后返回函数值

时间:2013-06-20 01:25:07

标签: java android android-asynctask

我有一个返回String的函数,里面有一个AsynTask。我的问题是我的函数必须在AsynTask完成他的工作后返回值!

这是我的代码:

public String getWeather(Context cont,int cityid,String latitude, String longitude){
    this.latitude=latitude;
    this.longitude=longitude;

    new get_scores() {
        protected void onPreExecute() {
            super.onPreExecute();

        }

        protected void onPostExecute(Boolean result) {

        }
    }.execute();

    return weatherdata;
}

我想在完成AsynTask之后返回weatherdata。可能需要几秒钟。

2 个答案:

答案 0 :(得分:1)

创建AsyncTask的原因不是在UI线程上运行.return语句是UI线程的一部分,因此return语句将始终返回null,因为它在后台线程启动时继续执行代码。

您有两种可能性:

1 - 您在UI Tread上运行代码,您的应用程序在此函数中停滞不前,直到它到达return语句并返回变量的计算值。请不要这样做。

2 - 这就是我要做的。不要从此函数返回任何内容,因此将其更改为返回void,删除return语句,调用asynctask,并从onPostExecute调用一个函数,该函数将操作您在doInBackground上赋值的变量。

我没有看到你在做什么doInBackground但是它必须在那里完成任务,所以实现它并在那里给你的变量赋值不再为null。

答案 1 :(得分:1)

一个解决方案是return来自`onPostExecute()的值。您可以通过正常设置AsyncTask然后将return语句更改为

来完成此操作
public String getWeather(Context cont,int cityid,String latitude, String longitude){
this.latitude=latitude;
this.longitude=longitude;

new get_scores() {
    protected void onPreExecute() {
        super.onPreExecute();

    }

    protected void onPostExecute(Boolean result) {

    }
}.execute();

  return new get_scores().execute();

}

这样做你可能想要添加progress bar/dialog,这样用户就不会认为应用程序被卡住了。只要任务不超过2或3秒(最多)并且您不希望用户在完成之前能够执行任何其他操作,那么这应该没问题。并且我会通过使用try/catch进行一些错误检查,或者确保在应用无法返回的情况下返回某些内容