У меня есть асинхронной задачи с doInBackground()
способом, как это:Опубликовать прогресс из внешнего класса во время Async Task?
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()
? Я уже читал эту тему: Difficulty in changing the message of progress dialog in async task - но это не был действительный источник помощи, так как мой метод не содержится в основном классе public class MainActivity extends Activity {}
.
EDIT # 1 -
После некоторой работы, я понял, что единственный путь есть переход к внешнему классу в Referece к «основной» поток, а затем реализовать конкретный способ публикации прогресса. Таким образом:
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