12

パブリック外部クラスに分割したいプライベートAsyncTaskメソッドがいくつかあります。私のアプリケーションには、アプリケーションのさまざまな部分からアクセスしたいいくつかの共有ルーチンを保持するApplicationを拡張するパブリッククラスがあります。ただし、AsyncTaskクラスを分割すると、getApplicationContext()を呼び出してアプリケーションライブラリへの参照を取得できなくなります(クラスは現在Activityから何も継承していません)。getBaseContext()にも問題があります。コンテキストがインスタンス化されてそこからビルドされるときに、コンテキストをAsyncTaskに渡す必要がありますか?それが安全かどうかわからない。

import java.util.ArrayList;
import android.os.AsyncTask;

public class DlTask extends AsyncTask
{
    long totalbytes = 0;
    long totalread = 0;
    ArrayList <String> data;

    @Override
    protected void onPreExecute ()
    {   
        AppLib lib = (AppLib) getApplicationContext();

        lib.saveStatusText ("Contacting " + lib.getServerAddress () + ":" + lib.getServerPort () + "...");
       super.onPreExecute ();
    }

      @Override
      protected Object doInBackground (Object... params)
      {
        data = lib.sendCommand (CMD_LIST);
         return true;
      }

      @Override
      protected void onPostExecute (Object result)
      {

         if (data != null)
         {
                    lib.saveStatusText (data.size () + " files found");
         }
         else
         {
            Log.d (TAG, "data is null");
            Toast.makeText (getBaseContext(), msg, Toast.LENGTH_SHORT).show ();                     
         }

         super.onPostExecute(result);
      }

}
4

3 に答える 3

13

コンテキストがインスタンス化されてそこからビルドされるときに、コンテキストをAsyncTaskに渡す必要がありますか?

Context他の方法では取得できないため、選択の余地はありません。

于 2013-03-07T18:25:13.880 に答える
0

AsyncTask のコンストラクターで Context を渡すか、Application クラスで静的変数を使用してアクセスします (set sMyInstace = this;)。ただし、最初の解決策が望ましいです。

于 2013-03-07T18:26:26.030 に答える