2015-09-06 66 views
1

我正在尝试使用restfb从facebook中拉取用户喜欢的东西。迭代器的docs say支持分页,但这不适用于我的Scala代码。我认为这与javaConversions暗示有关,但我不确定。scala中使用的Java迭代器无法正常工作

这里是我的代码:

import com.restfb.types.{Page, Photo, User} 
import com.restfb.{Parameter, Version, DefaultFacebookClient} 
import collection.JavaConversions._ 

class Facebook(accessToken: String) { 

    val facebookClient = new DefaultFacebookClient(
    accessToken, 
    Version.VERSION_2_4) 

    def getInterests = { 

    val likes = facebookClient.fetchConnection("me/likes", classOf[Page], 
     Parameter.`with`("fields", "id,name,category")) 

    likes.getData.map(like => s"id=${like.getId}, name=${like.getName} -- ") 
    } 
} 

我试图改变likes.getDatalikes.getData.iterator但我得到一个错误org.json4s.package$MappingException: Classes defined in method bodies are not supported.

什么我需要做的,使迭代器由likes.getData页面结果,以便返回我可以映射所有这些?

回答

0

我需要映射在连接为好,即:

likes.flatMap(likeConn => likeConn.map(like => 
    s"id=${like.getId}, name=${like.getName} -- ")) 

然后,它会自动进行分页。

+0

这是因为一个“连接”是一个页面,并在该页面上找到了一些项目(在你的情况下,一个“Like”)所以你需要迭代页面,然后通过每页项目。 – Norbert

0

尝试使用JavaConverters而不是JavaConversions

import scala.collection.JavaConverters._ 

val data = likes.getData.asScala.map(like => s"id=${like.getId}, name=${like.getName} -- ") 
+0

这仍然是一样的:-( – jbrown