Добавление пользовательских запросов Twitter REST API с использованием Kotlin
Я новичок в Котлине. Я создаю приложение, как Twitter. Я хочу создать собственный класс, расширяет TwitterApiClient - чтобы использовать больше конечных точек. Учебник Твиттера здесь Учебник
Вот мой код:
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)
}
})
Когда я запускаю приложение, оно всегда вылетает с сообщением "Сервисные методы не могут вернуть void." В этой строке
apiClient.getHomeTimeline().home_timeline(null, null, null, object : Callback<List<Tweet>>()
Пожалуйста, помогите мне решить эту проблему.
Спасибо вам всем.
1 ответ
Ваш обратный вызов вызывает методы, которые возвращают 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 я бы только догадывался.