→ corrupt003: 你自己在setText那麼也加log看是哪時候印出來就知道了 09/09 13:43
→ corrupt003: 那麼 --> 那邊 09/09 13:44
→ corrupt003: listener裡的 onResponse是在setText後才執行 09/09 13:45
→ d93n8311: 現在問題是listener裡面的name沒問題 但是同一個name 09/09 13:47
→ d93n8311: 到了listener外面就空了 09/09 13:47
→ passli: 就是執行的順序問題 你先txt.setText 然後才送request 09/09 13:58
推 jknm0510a: Response是一個thread,程式不會等thread完成才做sette 09/09 13:59
→ d93n8311: 我將mQueue.add(req)移動到setText前也是empty 09/09 14:00
→ jknm0510a: ,所以你要把setText寫在裡面,但是又會產生UIThread 09/09 14:00
→ jknm0510a: 的問題 09/09 14:00
→ d93n8311: 看來是我對它的理解有誤Q_Q 09/09 14:01
推 jknm0510a: 總而言之你要在try的後面用handler等方法回到UIThread 09/09 14:02
→ jknm0510a: 然後在UIThread內做setText動作 09/09 14:03
→ passli: 寫在裡面,加上 Activity.runOnUiThread 就可以解決了 09/09 14:03
→ mshockwave: 因為它的request是async的,你要在onResponse裡用hand 09/09 14:58
→ mshockwave: ler把訊息更新到ui 09/09 14:58
→ d93n8311: 謝謝各位 我大致了解問題在哪了 09/09 15:13
推 panjiongkai: name 宣告final 還可以變動? 09/09 15:16
→ d93n8311: 我後來把它拉去全域變數就改掉了 09/09 15:24
→ d93n8311: 如果宣告在OnCreate裡面它就會說要宣告成final才可以用 09/09 15:25
→ d93n8311: 我也不是很了解原因 09/09 15:25
→ y3k: 宣告成final的意思可以視為"不可以再拿去等於其他東西" 09/09 22:33
推 jknm0510a: 應該是你要拿進thread內的變數要宣告成final,不能再修 09/10 00:24
→ jknm0510a: 這是一個保障thread安全性的限制 09/10 00:24
→ ssccg: 不是thread的關係,是方法中的匿名類別的關係 09/10 02:13
→ ssccg: inner class會保有enclosing class的object reference 09/10 02:14
→ ssccg: 但method中的變數在method結束就沒了,所以實作是會copy一 09/10 02:16
→ ssccg: 份到inner class裡,所以原本的宣告要求final,才不會跟 09/10 02:16
→ ssccg: copy過去的不一致 09/10 02:16
→ ssccg: 不在method中的class field就沒這限制 09/10 02:17
推 jknm0510a: 喔!受教了,感謝 09/10 09:22