我是Kotlin的新手。 我正在构建一个类似Twitter的应用程序。 我想创建自定义类扩展TwitterApiClient - 使用更多端点。 Twitter的教程就在这里 Tutorial
这是我的代码:
class TwitterApiList(session: TwitterSession) : TwitterApiClient(session) {
fun getHomeTimeline(): TwitterCustom {
return getService(TwitterCustom::class.java)
}
}
// TwitterCustom interface
public interface TwitterCustom {
@GET("/1.1/statuses/home_timeline.json")
fun home_timeline(@Query("count") count: Int?, @Query("since_id") since_id: Int?, @Query("max_id") max_id: Int?, cb: Callback<List<Tweet>>)
}
// And how I use it
val apiClient = TwitterApiList(TwitterCore.getInstance().sessionManager.activeSession)
apiClient.getHomeTimeline().home_timeline(null, null, null, object : Callback<List<Tweet>>() {
override fun success(result: Result<List<Tweet>>?) {
Log.d("result", result.toString())
}
override fun failure(exception: TwitterException?) {
Log.d("failed", exception?.message)
}
})
当我运行应用程序时,它始终会崩溃,并显示“服务方法无法返回无效”的消息。
apiClient.getHomeTimeline().home_timeline(null, null, null, object : Callback<List<Tweet>>()
请帮我解决这个问题。
谢谢大家。
答案 0 :(得分:0)
您的回调是调用返回Unit
的方法。即success()
没有返回值,Log.d
会返回Unit
,因此隐含Unit
。同样适用于failure()
。
仔细看看Callback类。如果你有和“智能感知”等IDE,它会帮助你。否则,查看接口/类并确定如何定义方法,具体来说,查看返回类型并更改调用以匹配或将Callback<T>
方法更改为Unit(假设它是您的接口)。 This link可以帮助您弄清楚如何编写函数来返回特定类型。
让我们说你找到这样的东西......
interface Callback<T> {
fun success(result: Result<T>) : T //notice the : T determines the type of the function
//... other members
}
那么您的代码可能看起来像这样......
apiClient.getHomeTimeline().home_timeline(null, null, null, object : Callback<List<Tweet>>() {
override fun success(result: Result<List<Tweet>>?) {
Log.d("result", result.toString())
return result.getMemberForT() // I made up the name, would need
// decl. for Result<T>
}
//...
}
但是如果没有Callback和Result的声明,我只会猜测。