doInBackground()
次のようなメソッドを使用した非同期タスクがあります。
protected String doInBackground(String... params) {
MyClass session = new MyClass("email", "password");
return session.isAuthorized();
}
MyClass
完全に別のパッケージに入っている一方、次のようなものです。
private class MyClass {
// fields, constructors, etc
public Boolean isAuthorized() {
// some stuff
log("Action 1...");
// some stuff
log("Action 2...");
// some other stuff
return result;
}
public static void log(String str) {
// HERE I would like to publish progress in the Async Task
// but, until now, it's kinda like:
System.out.println(str);
}
}
問題は、メソッドに保持されているログの説明log()
を、メインのアクティビティ「コンテナー」の外部であっても、メソッドに渡すにはどうすればよいpublishProgress()
ですか? 私はすでにこのスレッドを読みました:非同期タスクで進行状況ダイアログのメッセージを変更するのが難しい- しかし、私のメソッドはメインクラスに含まれていないため、有効なヘルプソースではありませんでしたpublic class MainActivity extends Activity {}
。
編集#1 -
いくつかの作業の後、唯一の方法は「メイン」スレッドへの参照を外部クラスに渡し、そこに特定のメソッドを実装して進行状況を公開することであることに気付きました。そのような方法で:
public void log(String str) {
if (mThreadReference==null) {
System.out.println(str);
} else {
mThreadReference.doProgress();
}
}
これをmThreadReference
指している間AsyncTask
:
private class MyClassTask extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... params) {
// constructs MyClass instance with a reference and run main method
(new MyClass("email", "password", this)).isAuthorized();
}
public void doProgress(String str) {
publishProgress(str);
}
@Override
protected void onProgressUpdate(String... values) {
// some stuff
}
@Override
protected void onPostExecute(String result) {
}
}
しかし、明らかに、Eclipse は私に警告しています: The method publishProgress() is undefined for the type Activity
. 複数の特定の AsyncThread で使用できる一般的で絶対的なメソッドを外部クラスに記述するにはどうすればよいですか?
--> LOGs IN THE LOGIN THREAD 1
/
EXTERNAL CLASS ---> LOGs IN THE LOGIN THREAD 2
\
--> LOGs IN THE LOGIN THREAD 3