Java 从AlertDialog写入变量
所以我在做一个应用程序,我试图使用AlertDialog在PLC上写一个变量。我希望这样,每次单击按钮时,var都会增加1。除了只执行一次之外,它几乎可以正常工作。因此,当我单击“加速”按钮时,它会增加,但如果我再次单击它,它不会再次增加。如果我选择“减速”按钮,它会将值减少1(假设是这样),但如果我再次单击该按钮,它将不会再次执行。我对这种编程非常陌生。任何帮助都将不胜感激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
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);
}
}