2016-09-30 98 views
-1

所以我正在做一個應用程序,我試圖使用AlertDialog在PLC上編寫變量。我想讓它每次單擊按鈕時var都會增加1.它幾乎可以工作,而不是隻執行一次。所以當我點擊加速按鈕時,它會增加,但如果再次點擊它,它不會再次增加。如果我然後選擇減速按鈕,它會減少1,(如它的假設),但再一次,如果再次點擊按鈕它將不會再次執行。我對這種編程非常陌生。任何幫助將不勝感激,但!從AlertDialog寫入變量

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

}

回答

0

我認爲你是在執行您按一下按鈕,每次下面的代碼。這條線iMachineSpeedTemp = Integer.parseInt(sMachineSpeedTemp);將覆蓋iMachineSpeedTemp的保值增值一次,所以你會繼續得到同樣value.`

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

確定。一個問題是,值不會在0。該值正在被讀取另一個設備,它可能是任何東西。所以當我第一次開始活動時,我必須讀取這個值,然後從這個值開始遞增,這可能是任何東西。至少這是我目前的攻擊計劃,可能會倒退,idk ... –

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

這修正了它。唯一的區別,我可以看到,如果 - sMachineSpeedTemp = Integer.toString(iMachineSpeedTemp); vs sMachineSpeedTemp = iMachineSpeedTemp.toString(); 無論哪種方式,它的工作原理。現在...感謝Nolly J的幫助 –