0

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;
}

私はウェザーデータを返したいのですが、AynTask を終了した後です。数秒かかる場合があります。

4

2 に答える 2

1

AsyncTask を作成する理由は、UI スレッドで実行するためではありません。return ステートメントは UI スレッドの一部であるため、return ステートメントは常に null を返します。これは、バックグラウンド スレッドの開始時にコードの実行が継続されるためです。

次の 2 つの可能性があります。

1-UI Tread でコードを実行すると、return ステートメントに到達して変数の計算値を返すまで、アプリがこの関数で動作しなくなります。お願い、それはやめて。

2-それは私がすることです。この関数からは何も返さないので、void を返すように変更し、return ステートメントを削除して、asynctask を呼び出し、onPostExecute から、doInBackground で値を割り当てた変数を操作する関数を呼び出します。

doInBackground を実行している場所はわかりませんが、タスクを実行する必要がある場所があるので、それを実装して、変数に値を与えて、再度 null にならないようにします。

于 2013-06-20T02:06:27.907 に答える