2017-08-30 33 views
0

我正在開發一個具有kotlin幫助的android應用程序,但問題是基於純粹的kotlin基礎知識。下面是正顯示出一些異常行爲的功能:顯示神祕行爲的函數

fun CatchThat(funct:() -> Unit){ 
try { 
    funct() 
}catch (ex: Error){ 
    ex.printStackTrace() 
} 
} 

當我使用它在我的代碼

CatchThat { 
// Proprietary Code goes in here 
} 
  • 調試器不能正常工作(有時)
  • 專有代碼根本不執行(有時)

爲什麼遇到這種行爲,或者我得到一些概念錯誤(可能是lambdas)。任何幫助或建議,歡迎盡情(我在kotlin一個初學者)

編輯我在專有代碼正在做的事情。 我試圖調用一個Thread Pool,然後調用一個Web活動。這是最好的,我只能解釋一下。我爲此感到抱歉。

+0

對我來說,這段代碼示例的作品...您使用的是哪個版本的kotlin,以及您提供的專有代碼是什麼? – Piwo

+0

你沒有得到任何輸出?你應該用Throwable替換Error來捕獲異常 – crgarridos

+0

Kotlin 1.1.2'抱歉,我無法提供專有代碼,因爲代碼是**專有** – Mandy8055

回答

1

我不是當然,如果它將問題整理出來,但它是值得一試的,因爲所有的努力都是一成不變的(也因爲你的語法沒有錯誤)。 我想如果調試器停在錯誤的線路上(或者有時不工作),它通常意味着 在代碼緩存中被破壞。

嘗試使無效的想法緩存,並重新啓動,如果您使用的想法當然。

而在此之前這樣做

我也建議使用最新版本的更新科特林。

+0

謝謝先生!第一條粗線不起作用,但最後一行即更新到最新版本,即'1.1.3'修復了這個問題。非常感謝你 – Mandy8055

3

try/catch只能在當前線程上運行。在你的代碼段,如果在另一個線程一些例外ocourrs,在try/catch語句將無法正常工作

例如:

try { 
    println("Hola mundo 1!") 
    println(5/0) 
} catch (ex: Throwable) { 
    println("Oups! $ex")// will be printed 
} 

try { 
    Thread { 
     println("Hola mundo 2!") 
     println(5/0) 
    }.start() 
} catch (ex: Throwable) { 
    println("Oups! $ex")// won't be printed 
} 

println("Hola mundo 3!")//The exception thrown in the external thread don't kill the current thread 

對於調試問題看看到Android Studio threaded debugging

+0

感謝很多@crgarridos的答案,並給你寶貴的時間,但**爲什麼有時它會給出正確的輸出,調試器工作正常,有時代碼執行呢?** – Mandy8055

+0

只是猜測,它可以改變你的代碼,因爲你有一個線程池,執行是異步的。然後你可以在一個或另一個線程「隨機」出現異常 – crgarridos

+0

也許!但再次感謝您給我寶貴的時間和+1!!!!我一定會提及什麼時候我會得到正確的修復 – Mandy8055