首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala不会调用publishProgress回调,"onProgressUpdate“

Scala不会调用publishProgress回调,"onProgressUpdate“
EN

Stack Overflow用户
提问于 2011-10-23 09:56:09
回答 3查看 1.5K关注 0票数 4

我在这方面花费了太多时间,到目前为止,我一直没有使用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,它是一种解决办法:与上面相同

(3) http://www.assembla.com/code/scala-eclipse-toolchain/git/nodes/docs/android-examples/android-sdk/Wiktionary/src/com/example/android/wiktionary/MyAsyncTask.java?rev=f2fdb3144d0225487cafc7d628adf64889772db4

可悲的是,在Scala2.8.1上,它们似乎都不适合我,Android 2.2.2在Virtu11.04上运行Android-x86。

这是我的实际代码,垃圾清除,只是要点.如果有人能告诉我怎么回电话,我会很高兴的,现在还不是圣诞节。我在这个问题上花了好几个小时,根本无法让它工作,我已经尝试了“进步”类型的每一个变体,因为使用AnyRef确实有效,但是任何其他类型都不能作为"Params“类型工作,请参见上文(2)中关于该类型的详细信息。

唉,我得到了preExecute (未显示)、doInBackground和postExecute,但没有看到发布进度回调。:(

密码..。

代码语言:javascript
复制
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查找元素、提取属性等。

最美好的是:)

EN

Stack Overflow用户

发布于 2011-11-03 18:48:31

保护覆盖def onProgressUpdate(进度: SeqFeedEntry*) {}

您可能希望将您的AsyncTask指定为AsyncTask[AnyRef,FeedEntry,SeqFeedEntry]

所以你可以

保护覆盖def onProgressUpdate(提要: FeedEntry*)

相反,

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7865449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档