Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从AlertDialog写入变量_Java_Android_Onclick_Onclicklistener_Android Alertdialog - Fatal编程技术网

Java 从AlertDialog写入变量

Java 从AlertDialog写入变量,java,android,onclick,onclicklistener,android-alertdialog,Java,Android,Onclick,Onclicklistener,Android Alertdialog,所以我在做一个应用程序,我试图使用AlertDialog在PLC上写一个变量。我希望这样,每次单击按钮时,var都会增加1。除了只执行一次之外,它几乎可以正常工作。因此,当我单击“加速”按钮时,它会增加,但如果我再次单击它,它不会再次增加。如果我选择“减速”按钮,它会将值减少1(假设是这样),但如果我再次单击该按钮,它将不会再次执行。我对这种编程非常陌生。任何帮助都将不胜感激 public void ShowPopUpMenus(View v) { final AlertDialog.Build

所以我在做一个应用程序,我试图使用AlertDialog在PLC上写一个变量。我希望这样,每次单击按钮时,var都会增加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();

}

我认为每次单击按钮时,您都在执行下面的代码。此行
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;

}
然后您可以检查
是否已连接
是否为真

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);
 }

好啊但一个问题是该值不会为0。该值正在从另一个设备读取,它可以是任何内容。因此,当我第一次启动活动时,我必须读取该值,然后从该值开始递增,可以是任何值。至少这是我目前的攻击计划,可能是倒退的,idk…这解决了它。如果-sMachineSpeedTemp=Integer.toString(iMachineSpeedTemp),我可以看到的唯一区别;vs sMachineSpeedTemp=iMachineSpeedTemp.toString();不管怎样,它都是有效的。现在。。。谢谢你的帮助
                    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);
                            }
                        }