我有asyncTask类:
public class DownloadJar {
public DownloadJar(String serialnum)
{
if (serialnum!=null)
{
this.serialnum = serialnum;
new Download().execute();
}
}
private class Download extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... params) {
//Downloading stuff
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
//Need to notify main class
super.onProgressUpdate(values);
}
}
}
我通过主要类激活它:
public class FTPDownload extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ftpdownload);
Bundle extras = getIntent().getExtras();
if (extras != null)
{
serialnum = extras.getString("serialnum");
}
if (serialnum!=null)
{
DownloadJar dj = new DownloadJar(serialnum);
}
}
}
如何从DownloadJar创建回调以通知我的主类有关进度的信息?
答案 0 :(得分:1)
如果您在主课程中需要onProgressUpdate()
,请在那里覆盖它。等,
DownloadJar dj = new DownloadJar(serialnum){
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
};
答案 1 :(得分:1)
将活动中创建的处理程序与serialnum
Async的构造函数中的DownloadJar
字符串一起传递,并从onProgressUpdate
中调用它:
handler.sendEmptyMessage(0);
您可以通过AsyncTask中的消息传递数据,您可以像这样接收活动中的事件
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//do something
}
};
有关详细信息:http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html
答案 2 :(得分:1)
您可以创建界面,即:
interface UpdateProgress {
void progressUpdate(String s)
}
让你的班级FTPDownload(它是你的主类?)实现它。然后在创建DownloadJar时,将对您的活动的引用传递给它。然后,您可以从主要活动的DownloadJar.Download asynctask progressUpdate中调用onProgressUpdate。您必须记住在配置更改时更新此参考。
如果另一方面,DownloadJar是你的主类,那么你已经可以访问它了,你的asynctask是它的内部。
答案 3 :(得分:0)
您已创建接口,以便您可以从AsyncTask的onPostExecute方法设置该接口方法中的数据。并将接口方法作为匿名内部类传递,就像onClickListner一样。
在这里你可以找到nice explanation。