2017-08-07 59 views
0

我是Kotlin的新手。 我正在構建一個像Twitter一樣的應用程序。 我想創建自定義類擴展TwitterApiClient - 使用更多端點。 Twitter的教程是在這裏 Tutorial使用Kotlin添加自定義Twitter REST API查詢

這裏是我的代碼:

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

請幫助我解決這個問題。

謝謝大家。

+0

也許你會''有趣的home_timeline'''返回Unit(void)? –

+0

@qwert_ukg也許是問題所在。但是我不知道如何編寫這個函數來返回一些東西 - 在那之後實現它來使用回調函數。 –

+0

只是試圖添加返回類型 –

回答

0

您的回調是調用返回Unit的方法。即success()沒有返回值,Log.d返回Unit,所以暗示Unitfailure()也是如此。

仔細查看Callback類。如果你有IDE和「智能感」或類似的東西,它會幫助你。否則,請查看接口/類並確定如何定義方法,具體而言,查看返回類型並更改呼叫以匹配方法或將方法更改爲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> 
    } 
    //... 
} 

但是,如果沒有聲明的回調和結果,我只猜測。