看板 AndroidDev 關於我們 聯絡資訊
※ 引述《freedom74569 (莫急莫慌莫害怕)》之銘言: : https://www.ptt.cc/bbs/AndroidDev/M.1451090467.A.79A.html : 這是上次的問題, : 我有抓到問題了, : 我implements library然後使用裡面的fuction : //宣告ArrayList mDevices1 : public ArrayList<BluetoothDevice> mDevices1 = new ArrayList<BluetoothDevice>(); : //使用library function,還是這裡會做在library package裡面,這樣讓我取不到? : @Override : public void bluetoothDeviceListBeenRenewed(BluetoothList bluetoothList) { : //mDevices1 = bluetoothList; : mDevices1.addAll(bluetoothList); : // 這裡打印的出來mDevices01,而且bluelist確定有東西也有打印出來 : Log.e("mDevices1", String.valueOf(mLeDevices1)); : } : 我只有在這個function印得出來mDevices1, : 不過在如onCreate or 其他地方要拿來用, : 就拿不到mDevices1就為空的陣列 : 存不回去上面宣告的mDevices1那 : 我想問看看有什麼關鍵字! : 現在完全沒有方向... 因為你程式碼只給這樣 我只能用通靈的方式來猜 : @Override : public void bluetoothDeviceListBeenRenewed(BluetoothList bluetoothList) : { : //mDevices1 = bluetoothList; : mDevices1.addAll(bluetoothList); : // 這裡打印的出來mDevices01,而且bluelist確定有東西也有打印出來 : Log.e("mDevices1", String.valueOf(mLeDevices1)); : } 如果這邊是匿名函式 那應該就可以解釋為什麼你抓不到值了 mObj.setXXXListener(new OnBluetoothDeviceListBeenRenewed(){ @Override public void bluetoothDeviceListBeenRenewed(BluetoothList bluetoothList) { //mDevices1 = bluetoothList; mDevices1.addAll(bluetoothList); // 這裡打印的出來mDevices01,而且bluelist確定有東西也有打印出來 Log.e("mDevices1", String.valueOf(mLeDevices1)); } }); 猜測原本應該是長這樣 如果是這樣 原因就會如下 因為callback的定義就是做完某些事情的時後告訴你 當這個callback還沒有做好做滿的時候, 你的mDevices1一定沒有值。 那要怎麼做呢? 當然是等它做完再去拿囉 你可以寫一隻thread在後面不停的 new Thread(new Runnable(){ public void run(){ while(mDevices1.size() == 0); //做你要做的事情 } }).start(); 直到mDevices1有值了, 但是萬一callback回來size還是0你就gg了。 或者你可以在寫一個callback function 當他做完的時候, 通知你去拿 interface OnDataBackListener{ void onBack(); } OnDataBackListener mOnDataBackListener; void setOnDataBackListener(OnDataBackListener listener){ mOnDataBackListener = listener; } 然後註冊這個listener setOnDataBackListener(new OnDataBackListener(){ void onBack(){ //去拿mDevices1資料 } }); 接著在原本的方法內 mObj.setXXXListener(new OnBluetoothDeviceListBeenRenewed(){ @Override public void bluetoothDeviceListBeenRenewed(BluetoothList bluetoothList) { //mDevices1 = bluetoothList; mDevices1.addAll(bluetoothList); // 這裡打印的出來mDevices01,而且bluelist確定有東西也有打印出來 Log.e("mDevices1", String.valueOf(mLeDevices1)); if(mOnDataBackListener != null){ mOnDataBackListener.onBack(); } } }); 這樣就可以確實拿到你要的資料了 如果不是這樣的情況 那就是我通靈失敗 再把程式碼多貼一點上來吧! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.55.170 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1451316077.A.0C7.html ※ 編輯: givemepass (114.24.55.170), 12/28/2015 23:21:44