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

时间:2017-08-07 04:05:08

标签: android twitter kotlin twitter-rest-api

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

请帮我解决这个问题。

谢谢大家。

1 个答案:

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