Запись переменной из AlertDialog

#java #android #onclick #onclicklistener #android-alertdialog

#java #Android #onclick #onclicklistener #android-alertdialog

Вопрос:

Итак, я делаю приложение, которое я пытаюсь использовать AlertDialog для записи переменной на ПЛК. Я хочу сделать так, чтобы каждый раз, когда вы нажимаете кнопку, значение переменной увеличивается на 1. Это почти работает, кроме того, что выполняется только один раз. Поэтому, когда я нажимаю кнопку ускорения, она увеличивается, но если я нажму ее снова, она больше не увеличивается. Если я затем нажму кнопку уменьшения скорости, это уменьшит значение на 1 (как и предполагалось), но опять же, оно не будет выполняться снова, если я снова нажму кнопку. Я очень новичок в этом типе программирования. Любая помощь будет оценена по достоинству!

 public void ShowPopUpMenus(View v) {
final AlertDialog.Builder sayWindows = new AlertDialog.Builder(WritesActivity.this);

sayWindows.setPositiveButton("Speed Up", null);
sayWindows.setNegativeButton("Close", null);
sayWindows.setNeutralButton("speed Down", null);
//sayWindows.setAdapter(listWords, null);
//sayWindows.setView(saySomething);

sayWindows.setTitle("                  Machine Speed");  //Title!

final AlertDialog mAlertDialog = sayWindows.create();
mAlertDialog.setMessage("                                    "   sMachineSpeedTemp);  //Center Text, Probably not the correct way to do this. :)

mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(final DialogInterface dialog) {

        //while (bDummy== false) {
        Button button_Speed_Up = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        button_Speed_Up.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    MlpiConnection device = m_app.getDevice();
                    device.connect("192.168.0.5");

                    if (device.isConnected()) {
                        sMachineSpeedTemp = (device.logic().readVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb"));
                        iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);
                        iMachineSpeedTemp  ;
                        device.logic().writeVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb", sMachineSpeedTemp);
                        sMachineSpeedTemp = iMachineSpeedTemp.toString();
                        mAlertDialog.setMessage(""   sMachineSpeedTemp);

                    }
                    else
                    {
                        mAlertDialog.setMessage("bad connection");
                    }
                }
                    catch (Exception e) {
                    Context c = v.getContext();
                    Toast.makeText(c, e   "Connection Error UP", Toast.LENGTH_LONG).show();
                }
            }

        });

        Button button_Speed_Down = mAlertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
        button_Speed_Down.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    MlpiConnection device = m_app.getDevice();
                    device.connect("192.168.0.5");

                    if (device.isConnected()) {
                        sMachineSpeedTemp = (device.logic().readVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb"));
                        iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);
                        iMachineSpeedTemp--;
                        device.logic().writeVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb", sMachineSpeedTemp);
                        sMachineSpeedTemp = iMachineSpeedTemp.toString();
                        mAlertDialog.setMessage(sMachineSpeedTemp);
                        mAlertDialog.setMessage(""   sMachineSpeedTemp);
                    }
                    else
                    {
                        mAlertDialog.setMessage("bad connection");
                    }
                } catch (Exception e) {
                    Context c = v.getContext();
                    Toast.makeText(c, e   "Connection Error Down", Toast.LENGTH_LONG).show();
                }
            }

        });

    }

});

mAlertDialog.show();
  

}

Ответ №1:

Я думаю, что вы выполняете приведенный ниже код каждый раз, когда нажимаете на кнопку. Эта строка iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp); переопределит значение iMachineSpeedTemp и увеличит его один раз, чтобы вы продолжали получать одно и то же значение.`

 if (device.isConnected()) {
     sMachineSpeedTemp = device.logic().readVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb"));
     iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);
     iMachineSpeedTemp  ;
     device.logic().writeVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb", sMachineSpeedTemp);
     sMachineSpeedTemp = iMachineSpeedTemp.toString();
     mAlertDialog.setMessage(""   sMachineSpeedTemp);
}
  

Возможным решением является логический флаг

 public class MyClass{

  private int iMachineSpeedTemp;
  private boolean isConnected = false;

}
  

Затем вы можете проверить isConnected , верно ли это

 if (device.isConnected()) {
    if(isConnected){
       iMachineSpeedTemp  
    }else{
       sMachineSpeedTemp = device.logic().readVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb"));
       iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);
       iMachineSpeedTemp  ;
       isConnected = true;
   }   
   device.logic().writeVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb", sMachineSpeedTemp);
   sMachineSpeedTemp = iMachineSpeedTemp.toString();
   mAlertDialog.setMessage(""   sMachineSpeedTemp);
 }
  

Комментарии:

1. ОК. Одна из проблем заключается в том, что значение не будет равно 0. Значение считывается с другого устройства, и оно может быть любым. Поэтому мне нужно будет прочитать значение при первом запуске действия, а затем увеличить это значение, которое может быть любым. По крайней мере, это мой текущий план атаки, может быть наоборот, idk…

Ответ №2:

                     public void onClick(View v) {
                        try {
                            MlpiConnection device = m_app.getDevice();
                            device.connect("192.168.0.5");
                            if (device.isConnected()) {
                                    sMachineSpeedTemp = device.logic().readVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb");
                                    iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);
                                    iMachineSpeedTemp  ;
                                    sMachineSpeedTemp = Integer.toString(iMachineSpeedTemp);
                                    device.logic().writeVariableBySymbolAsString("Application.UserVarGlobal.sMachineSpeed_gb", sMachineSpeedTemp);
                                    mAlertDialog.setMessage("                                   "   sMachineSpeedTemp);
                            }
                        }
  

Комментарии:

1. Это исправило это. Единственное отличие, которое я вижу, если — sMachineSpeedTemp = Integer.toString(iMachineSpeedTemp); против sMachineSpeedTemp = iMachineSpeedTemp.toString(); В любом случае, это работает. Пока… Спасибо за помощь Nolly J