Добавление пользовательских запросов 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 я бы только догадывался.

Другие вопросы по тегам