※ 引述《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();
}
}
});
這樣就可以確實拿到你要的資料了
如果不是這樣的情況 那就是我通靈失敗
再把程式碼多貼一點上來吧!