0

我是 Kotlin 的新手。我正在构建一个像 Twitter 这样的应用程序。我想创建自定义类扩展 TwitterApiClient - 以使用更多端点。Twitter 的教程在这里 教程

这是我的代码:

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>>()

请帮我解决这个问题。

谢谢你们。

4

1 回答 1

0

您的回调正在调用返回的方法Unit。即success()没有返回值,Log.d返回Unit,所以Unit是隐含的。也一样failure()

仔细看看 Callback 类。如果您有 IDE 和“Intelli-sense”之类的,它会对您有所帮助。否则,查看接口/类并确定方法是如何定义的,具体来说,查看返回类型并更改您的调用以匹配或将Callback<T>方法更改为 Unit(假设它是您的接口)。 此链接可以帮助您弄清楚如何编写函数以返回特定类型。

假设你找到了这样的东西......

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 的声明,我只会猜测。

于 2017-08-07T10:58:08.233 回答