Re: [问题] 有关于拿不到Arraylist的问题

楼主: givemepass (λ)   2015-12-28 23:21:14
※ 引述《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();
}
}
});
这样就可以确实拿到你要的资料了
如果不是这样的情况 那就是我通灵失败
再把程式码多贴一点上来吧!

Links booklink

Contact Us: admin [ a t ] ucptt.com