我的程序有问题,当我运行程序时,我需要进行2次迭代来更新一个名为“existe”的变量。我使用处理程序进行此更新。 我认为是同步问题,但我不知道它在哪里。 我有1个broadcastreceiber,它重新调整了服务方法的响应,但我认为首先是它完成了按钮处理程序代码,后来它正在运行broadcastreceiber。 虽然我认为broadcastreceiber应该在recibe时运行方法服务的响应? 谢谢你的帮助。
这是按钮处理程序的代码:
View.OnClickListener buttonhandler=new View.OnClickListener(){
public void onClick(View v) {
EditText id_camarero = (EditText) findViewById(R.id.id_camarero);
String numero = id_camarero.getText().toString();
if( numero.trim().equals("")){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
// set title
alertDialogBuilder.setTitle("Fallo de id");
// set dialog message
alertDialogBuilder
//.setMessage("Click salir para finalizarprograma")
.setCancelable(false)
.setPositiveButton("Salir",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
MainActivity.this.finish();
}
})
.setNegativeButton("Reintentar",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
idcamarero=Integer.parseInt(numero);
comprobacion();
//IntentFilter filter = new IntentFilter(MyService.DATA_RECEIVED_INTENT);
// registerReceiver(androidListener, filter);
if((existe==false)){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
// set title
alertDialogBuilder.setTitle("Fallo de id");
// set dialog message
alertDialogBuilder
//.setMessage("Click salir para finalizarprograma")
.setCancelable(false)
.setPositiveButton("Salir",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
MainActivity.this.finish();
}
})
.setNegativeButton("Reintentar",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
else{
// Intent intent= new Intent(GestorRestauranteActivity.this,MenuMesas.class);
// intent.putExtra("id", numero);//enviamos el id de camarero a la actividad que invocamos
// startActivity(intent);
finish();
}
}
};
这是broadcastreceiber的代码:
BroadcastReceiver androidListener = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(MyService.DATA_RECEIVED_INTENT))
{
Message msg = Message.obtain();
msg.obj = intent.getExtras().get("text");
msg.setTarget(cEmiHandler);
msg.sendToTarget();
}
}
};
答案 0 :(得分:0)
不要让它变得那么复杂,简单的解决方法是使用Object类的wait(),notify()方法。 在主线程中,您通过wait()方法锁定对象,在另一个线程中(工作线程执行主作业),在作业完成时使用notify(),主线程将被解锁并继续。
Object x = new Object();
在主线程中:x.wait(); 在工作线程中:完成工作然后x.notify();