[問題] arraylist內容

看板AndroidDev作者 (d93n8311)時間8年前 (2015/09/09 13:30), 編輯推噓5(5026)
留言31則, 8人參與, 最新討論串1/2 (看更多)
http://pastebin.com/aATXzZFZ 這是我的程式碼,底下是Log內容 我想請問一下為何我在try catch中可以抓到我需要的東西並add進我的ArrayList內 Log中也能看見name.add()確實有執行。 在listener中的name.isempty()也確實不為空(我有把內容印出來過確定也沒問題) 但是在底下那行txt.setView(name.isempty())就會印出true (我也印過name.toString確實為空) 有辦法能讓name在listener外也不為空嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.187.188 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1441776636.A.5BA.html

09/09 13:43, , 1F
你自己在setText那麼也加log看是哪時候印出來就知道了
09/09 13:43, 1F

09/09 13:44, , 2F
那麼 --> 那邊
09/09 13:44, 2F

09/09 13:45, , 3F
listener裡的 onResponse是在setText後才執行
09/09 13:45, 3F

09/09 13:47, , 4F
現在問題是listener裡面的name沒問題 但是同一個name
09/09 13:47, 4F

09/09 13:47, , 5F
到了listener外面就空了
09/09 13:47, 5F

09/09 13:58, , 6F
就是執行的順序問題 你先txt.setText 然後才送request
09/09 13:58, 6F

09/09 13:59, , 7F
Response是一個thread,程式不會等thread完成才做sette
09/09 13:59, 7F

09/09 14:00, , 8F
我將mQueue.add(req)移動到setText前也是empty
09/09 14:00, 8F

09/09 14:00, , 9F
,所以你要把setText寫在裡面,但是又會產生UIThread
09/09 14:00, 9F

09/09 14:00, , 10F
的問題
09/09 14:00, 10F

09/09 14:01, , 11F
看來是我對它的理解有誤Q_Q
09/09 14:01, 11F

09/09 14:02, , 12F
總而言之你要在try的後面用handler等方法回到UIThread
09/09 14:02, 12F

09/09 14:03, , 13F
然後在UIThread內做setText動作
09/09 14:03, 13F

09/09 14:03, , 14F
寫在裡面,加上 Activity.runOnUiThread 就可以解決了
09/09 14:03, 14F

09/09 14:58, , 15F
因為它的request是async的,你要在onResponse裡用hand
09/09 14:58, 15F

09/09 14:58, , 16F
ler把訊息更新到ui
09/09 14:58, 16F

09/09 15:13, , 17F
謝謝各位 我大致了解問題在哪了
09/09 15:13, 17F

09/09 15:16, , 18F
name 宣告final 還可以變動?
09/09 15:16, 18F

09/09 15:24, , 19F
我後來把它拉去全域變數就改掉了
09/09 15:24, 19F

09/09 15:25, , 20F
如果宣告在OnCreate裡面它就會說要宣告成final才可以用
09/09 15:25, 20F

09/09 15:25, , 21F
我也不是很了解原因
09/09 15:25, 21F

09/09 22:33, , 22F
宣告成final的意思可以視為"不可以再拿去等於其他東西"
09/09 22:33, 22F

09/10 00:24, , 23F
應該是你要拿進thread內的變數要宣告成final,不能再修
09/10 00:24, 23F

09/10 00:24, , 24F
這是一個保障thread安全性的限制
09/10 00:24, 24F

09/10 02:13, , 25F
不是thread的關係,是方法中的匿名類別的關係
09/10 02:13, 25F

09/10 02:14, , 26F
inner class會保有enclosing class的object reference
09/10 02:14, 26F

09/10 02:16, , 27F
但method中的變數在method結束就沒了,所以實作是會copy一
09/10 02:16, 27F

09/10 02:16, , 28F
份到inner class裡,所以原本的宣告要求final,才不會跟
09/10 02:16, 28F

09/10 02:16, , 29F
copy過去的不一致
09/10 02:16, 29F

09/10 02:17, , 30F
不在method中的class field就沒這限制
09/10 02:17, 30F

09/10 09:22, , 31F
喔!受教了,感謝
09/10 09:22, 31F
文章代碼(AID): #1LxyFyMw (AndroidDev)
討論串 (同標題文章)
文章代碼(AID): #1LxyFyMw (AndroidDev)