我在这方面花费了太多时间,到目前为止,我一直没有使用publishProgress()特性.幸运的是,onPostExecute也在UI线程中运行,所以我不得不为我想要加载的每一个映像创建N个线程,而不是一个更新列表视图的大线程。所以,不是致命的,而是真正的烦恼。
首先,为这些页面提供更多的洞察力和参考方法!有一个纯Scala实现..。
(1) http://blog.nelsonsilva.eu/2009/10/31/scala-on-android-101-proguard-xmlparser-and-function2asynctask,它是一个变通方法:Ises.scala-lang.org浏览SI-1459 (新用户限制为2个链接)
(2) va.eu/2009/10/31/scala-on-android-101-proguard-xmlparser-and-function2asynctask,它是一种解决办法:与上面相同
可悲的是,在Scala2.8.1上,它们似乎都不适合我,Android 2.2.2在Virtu11.04上运行Android-x86。
这是我的实际代码,垃圾清除,只是要点.如果有人能告诉我怎么回电话,我会很高兴的,现在还不是圣诞节。我在这个问题上花了好几个小时,根本无法让它工作,我已经尝试了“进步”类型的每一个变体,因为使用AnyRef确实有效,但是任何其他类型都不能作为"Params“类型工作,请参见上文(2)中关于该类型的详细信息。
唉,我得到了preExecute (未显示)、doInBackground和postExecute,但没有看到发布进度回调。:(
密码..。
private class FeedLoaderTask(val activity: ActivityFeedReader)
extends android.os.AsyncTask[AnyRef, Seq[FeedEntry], Seq[FeedEntry]]
{
/** @brief dialog to show our progress */
private var dlgBusy:ProgressDialog = null;
override def onPreExecute() {
dlgBusy = ProgressDialog.show(...)
}
override protected def doInBackground(params: AnyRef*): Seq[FeedEntry] = {
// resorted to AnyRef for reasons explained above although
val url = params.apply(0).asInstanceOf[String]
log.d("FeedLoaderTask: doInBackground: " + url)
val feeds = new FeedReader(url).extract
log.d("Got them, total: " + feeds.length)
publishProgress()//feeds) // <--- seems to "call" but does not arrive
feeds
}
protected def onProgressUpdate(feeds: Seq[FeedEntry]): Void = {
// work damn you, WORK!
log.d("FeedLoaderTask: onProgressUpdate: " + feeds.length)
return null
}
override protected def onPostExecute (feeds: Seq[FeedEntry]) {
dlgBusy.dismiss()
dlgBusy = null
feeds.length match {
case 0 => messageAndTerminate(R.string.rss_failed_msg)
case _ =>
listAdapter = new FeedListAdapter(...)
activity.setListAdapter(listAdapter)
...blah blah more code...
}
}
}所以,我有一个工作(也许更好的方法)来做我想做的事,但我讨厌不能做我想做的事。
这是一个很好的解决方案,因为它打败了我.这是我的第一个Android应用程序,有一次我几乎用Java完成了它,但是我的打字和巡查让我非常讨厌,所以我从零开始,同时自学了Scala。我知道Erlang,LISP和Haskell,所以这很有帮助。我只能说“现在就学斯卡拉!”XML支持非常棒,这是我最初的RSS解析代码(四个类!)现在在一个文件和大约80行代码中,使用XML查找元素、提取属性等。
最美好的是:)
发布于 2011-11-03 18:48:31
保护覆盖def onProgressUpdate(进度: SeqFeedEntry*) {}
您可能希望将您的AsyncTask指定为AsyncTask[AnyRef,FeedEntry,SeqFeedEntry]
所以你可以
保护覆盖def onProgressUpdate(提要: FeedEntry*)
相反,
https://stackoverflow.com/questions/7865449
复制相似问题