使用Kotlin添加自定义的Twitter REST API查询

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

请帮我解决这个问题。

谢谢你们。

你的回调是调用返回Unit方法。 即success()没有返回值, Log.d返回Unit ,所以Unit是隐含的。 同样failure()

仔细观察Callback类。 如果你有和“智能感”或类似的IDE,它会帮助你。 否则,查看接口/类,并确定如何定义方法,具体来说,查看返回类型,并更改您的调用以匹配或将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> } //... } 

但没有回调和结果的声明,我只会猜测。