1

グーグルで長く失敗した検索の後、 Droid-Fuhttps ://github.com/kaeppler/droid-fuと呼ばれる便利なライブラリに関する情報はほとんどないことがわかりました

作成者による紹介(http://brainflush.wordpress.com/2009/11/16/introducing-droid-fu-for-android-betteractivity-betterservice-and-betterasynctask/)またはAPI(http:/ /kaeppler.github.com/droid-fu)、新しいbetterasynctaskを定義する方法(どのメソッドがどの情報を保持するかなど)を理解できませんでした。

ですから、私(そして明らかに他の人たちも)にいくつかの有用なソースコードやチュートリアルを提供してくれる人がいたら、私はそれを大いに感謝します!

(プロジェクトのjarファイルが必要な場合は、お知らせください。コピーをお送りします)

編集:

良い例がここにあります!そしてここに

わかりました、これが私がソースコードで見つけたいくつかの追加情報です:

  1. 進行状況ダイアログが自動的に表示されます。useCustomDialog()、disableDialog()を参照してください
  2. doInBackground内から例外がスローされた場合、これはhandleErrorメソッドによって処理されるようになりました。
  3. これで、onPreExecute()、doInBackground()、およびonPostExecute()をオーバーライドする必要があります。代わりに、それぞれbefore()、doCheckedInBackground()、およびafter()を使用する必要があります。

それでは、これから何ができるか見てみましょう...まだ実用的な例を探しています!

編集2:

ここここにいくつかの例があります。私はそれに固執しますが、エラーが発生します。唯一の違いは、私のAsyncTaskがアクティビティ内で定義されておらず、独自のクラスであるということです。コードをステップスルーすると、(AsyncTask組み込み)ダイアログの作成時にエラーが発生することがわかります。

これは私のスタックトレースです:

すぐに来る

4

2 に答える 2

1

主に Fragment のサポートがないため、Droid-fu は現在少し古くなっています。しかし、それを使用した私が書いたアプリの例を挙げます。

まず、アクティビティ クラスは BetterActivity (または BetterXXXActivity) をサブクラス化する必要があります。私のコードでは ListActivity を使用していたので、ここでは BetterListActivity をサブクラス化しています。また、一部の機能を拡張できるように、BetterAsyncTask のサブクラスも定義します。

public class DroidFuExample extends BetterListActivity {

    private ExampleTask mTask;
    private List<Stuff> mMainStuff;

    private class ExampleTask extends BetterAsyncTask<Void, Void, Integer> {
        private List<Stuff> mStuff;
        private DroidFuExample mContext; // a context for lifecycle management
        ...
    }
}

今、私のタスクはパラメーターをとらず、不確定なダイアログを使用するため、進行状況は公開されず、整数を返す必要があります。ニーズは異なる場合があり、それはクラス定義で使用される型に影響します。

次のステップは、タスクがバックグラウンドで処理するものを定義することです。私の場合、mStuff に入力する必要があります。タスク クラスで、doInBackground() または doCheckedInBackground() のいずれかを定義します (doChecked... は、キャッチしたい場合に例外をスローできます)。

    protected Integer doCheckedInBackground(Context context, Void... params)
            throws Exception {
        mStuff = // some long-running code (no longer on the UI thread)
        return 1;
    }

最後に、クラス変数を更新したり、UI を設定したりするなど、結果に対して何かを行う必要があります。これはで行われafterます:

    protected void after(Context context, Integer integer) {
        if (integer >= someAcceptablePositiveConstant) {
            mMainStuff = mStuff;
            doSomethingInTheUIWithMainStuff();
        } else {
            //gah!
        }
    }

before()おっしゃったように、タスクの前に UI スレッドで機能するオーバーライドを定義したり、チェックされていないfailed()/handleError()チェックされていないエラーを処理したりするなど、クラスでできることは他にもあります。これは単なる例です。お役に立てば幸いです。

于 2011-12-07T18:56:52.350 に答える
0

@ss の何という苦痛!エラーは、BetterActivityHelper クラス内に隠されていました。

public static ProgressDialog createProgressDialog(final Activity activity,
        int progressDialogTitleId, int progressDialogMsgId) {
    ProgressDialog progressDialog = new ProgressDialog(activity);
    if (progressDialogTitleId <= 0) {
        progressDialogTitleId = activity.getResources().getIdentifier(
                PROGRESS_DIALOG_TITLE_RESOURCE, "string", activity.getPackageName());
    }
    progressDialog.setTitle(progressDialogTitleId);
    if (progressDialogMsgId <= 0) {
        progressDialogMsgId = activity.getResources().getIdentifier(
                PROGRESS_DIALOG_MESSAGE_RESOURCE, "string", activity.getPackageName());
    }
    progressDialog.setMessage(activity.getString(progressDialogMsgId));
    progressDialog.setIndeterminate(true);
    progressDialog.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            activity.onKeyDown(keyCode, event);
            return false;
        }
    });

progressDialogTitleId と progressDialogMsgId は res/values/string.xml 内の値を想定しています:

<!-- Droid-Fu Progressdialog -->
<string name="droidfu_progress_dialog_title">Some nasty dialog title</string>
<string name="droidfu_progress_dialog_message">Some funny message</string>

それらが定義されていない場合、実行時例外がスローされます。

残念ながら、最高のヘルパー クラスでさえUNDOCUMENTEDであればほとんど役に立ちません。何がうまくいかなかったのかを理解するのに数時間かかりました。繰り返しになりますが、開発者に「ありがとう」はありません。ソル

于 2011-12-08T15:00:52.110 に答える