1

私はそれについて多くのことを読み、成功することなく多くのことを試しました. でも全然難しくないようなので、ちょっと物足りないかな。

私は2つのクラス、aMainActivityとaのクラスを取得しましたasynch task。タスクは完全に機能しています
doInBackgroundしかし、それが完了したら、自分の特定の時点で続行するようにプログラムしたいと思いますMainActivity

protected Integer doInBackground(Void... params) {
    try {
        Log.d("control", "ZipHelper.unzip() - File: " + _archive);
        ZipFile zipfile = new ZipFile(_archive);
        for (Enumeration<? extends ZipEntry> e = zipfile.entries(); e
                .hasMoreElements();) {
            ZipEntry entry = (ZipEntry) e.nextElement();
            unzipEntry(zipfile, entry, _outputDir);

        }
    } catch (Exception e) {
        Log.d("control", "ZipHelper.unzip() - Error extracting file "
                + _archive + ": " + e);
        setZipError(true);
    }
    return null;
}
protected void onPostExecute(Integer... result) {
    //Here something like MainActivity.showPicture();
}

で何かをしなければならないことonPostExecuteはわかっていますが、正確にはわかりません。それでは、完了後に
トーストを表示したいとしましょう。MainActivityasynch-task

4

2 に答える 2

3

リスナー インターフェイスを使用します。

例 :

リスナー インターフェイス

public interface AsyncTaskListener
{
    public void onTaskComplete();
}

ZipHelper クラス

public class ZipHelper extends AsyncTask<Void, Void, Integer>
{
    private String filename;
    private AsyncTaskListener listener;
    private File file;
    public ZipHelper(String filename, File file, AsyncTaskListener listener)
    {
        this.filename = filename;
        this.file = file;
        this.listener = listener;
    }

    @Override
    protected void onPreExecute()
    {
        //stuff here
    }

    @override
    protected Integer doInBackground(Void... params)
    {
        //Background stuff here
    }

    @Override
    protected void onPostExecute(Integer... result)
    {
        listener.onTaskComplete();
    }
}

主な活動

public class MainActivity implements AsyncTaskListener
{
    public void onCreate(Bundle savedInstanceState)
    {
        super(savedInstanceState);
        setContentView(R.layout.main_activity);

        //Your stuff

        new ZipHelper(zip[0].mZipFileName, file, MainActivity.this).execute();
    }

    public void onTaskComplete()
    {
        //AsyncTask post stuff
    }
}
于 2013-05-06T14:32:36.967 に答える