Java 主活动不等待子活动完成
我对Java和Android还很陌生,所以要温柔:) 我试图启动ActivityForResult以启用蓝牙,但似乎主活动保持运行并执行getPaireddevices,而不等待ActivityForResult完成。我犯了什么错Java 主活动不等待子活动完成,java,android,Java,Android,我对Java和Android还很陌生,所以要温柔:) 我试图启动ActivityForResult以启用蓝牙,但似乎主活动保持运行并执行getPaireddevices,而不等待ActivityForResult完成。我犯了什么错 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
if (BtAdapter==null){
Toast.makeText(getApplicationContext(), "No Bluetooth adapter...",0 ).show();
finish();
} else {
if (!BtAdapter.isEnabled()){
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 1);
}
}
GetPairedDevices();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_CANCELED){
Toast.makeText(getApplicationContext(), "too bad..", Toast.LENGTH_LONG).show();
finish();
}
}
移动
GetPairedDevices()将>编码到您的onActivityResult()
糟糕的
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_CANCELED){
Toast.makeText(getApplicationContext(), "too bad..", Toast.LENGTH_LONG).show();
finish();
}
else if (resultCode == RESULT_OK)
{
GetPairedDevices();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
if (BtAdapter==null){
Toast.makeText(getApplicationContext(), "No Bluetooth adapter...",0 ).show();
finish();
} elseif (BtAdapter != null && !BtAdapter.isEnabled()){
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 1);
}
else{
GetPairedDevices();
}
}
通过这种方式,onCreate()
可以完成,并且该功能只有在您启用蓝牙时才会运行,我相信这正是您想要的
如果您希望在启用蓝牙且在onCreate()
中没有null
的情况下运行它,那么您可能需要将onCreate()
更改为
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
//super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_CANCELED){
Toast.makeText(getApplicationContext(), "too bad..", Toast.LENGTH_LONG).show();
finish();
}
else if (resultCode == RESULT_OK)
{
GetPairedDevices();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
if (BtAdapter==null){
Toast.makeText(getApplicationContext(), "No Bluetooth adapter...",0 ).show();
finish();
} elseif (BtAdapter != null && !BtAdapter.isEnabled()){
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, 1);
}
else{
GetPairedDevices();
}
}
注意:
这只是一个简单的示例,说明了如何执行此操作,因为onCreate()
将完成函数中剩余代码的执行。我还没有测试过它,也不知道你的所有代码,但类似的东西应该会有所帮助。如果你想在子活动完成后调用函数GetPariedDevices,你必须将该调用放在onActivityResult函数中,否则,它将被调用,因为onCreate函数将继续执行其余的句子
希望有帮助:)是的,你可能是对的,但我计划在onCreate活动中编写更多代码,比如opensockets等等。。。在继续其他操作之前,我只需确保子活动已完成……然后您应该将它们放入活动Forresult()
中,或者将它们移动到最后一个中,否则就像在我的示例中那样
。因此,我一直生活在一个梦中,主要活动将在继续之前等待结果。。。谢谢你打破了这个梦想:)