我有一部分代码,我首先setText
,然后创建Toast
,之后我尝试通过蓝牙连接。问题是我的setText
和Toasts
仅在连接完成后才会显示。
我尝试将Log.i
代替Toasts
并同时显示它们。
有人可以解释为什么以及如何同时制作Toasts
吗?
代码:
........
else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
tvDevices.setText("");
Toast.makeText(getApplicationContext(), "Lost connection!", Toast.LENGTH_SHORT).show();
connect(btDevice, ConstantsVariables.reconnectionAttempts);
}
public void connect(BluetoothDevice bt, int attempts){
Toast.makeText(getApplicationContext(), "Trying to connect...", Toast.LENGTH_SHORT).show();
if(attempts > 0){
for(int i = 1; i <= ConstantsVariables.reconnectionAttempts; i++){
ConnectThread thread = new ConnectThread(bt);
boolean connectVar = thread.connect();
if(connectVar){
break;
}
}
}
}
.......
public boolean connect() {
BA.cancelDiscovery();
try {
mSocket.connect();
} catch (IOException e) {
Log.d("CONNECTTHREAD","Could not connect: " + e.toString());
try {
mSocket.close();
} catch (IOException exception){}
return false;
}
return true;
}
答案 0 :(得分:0)
在尝试连接时,您可能会阻止UI线程。尝试将连接代码移动到后台线程或AsyncTask,并处理AsyncTask回调中的UI更改。
编辑:传递给Toast的上下文getApplicationContext()
也不明确。你参加活动吗?在这种情况下,它应该简单地指向活动的上下文,即this
而不是应用程序的上下文