2016-09-30 15 views
-1

私はAlertDialogを使ってPLCに変数を書き込もうとしているアプリケーションをやっています。私はあなたがボタンをクリックするたびにvarを1ずつインクリメントするようにしたいと思います。だから、スピードアップボタンをクリックするとインクリメントしますが、もう一度クリックすると再びインクリメントしません。私がそれからSpeed Downボタンを選択すると値が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の値をオーバーライドして、あなたが可能な解決策は、ブールフラグ次に

public class MyClass{ 

    private int iMachineSpeedTemp; 
    private boolean isConnected = false; 

} 

あなたがいるかどうかを確認することができますにある

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

同じvalue.`になっていきますので、一度それをインクリメントします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

OKです。 1つの問題は、値が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); 対 sMachineSpeedTemp = iMachineSpeedTemp.toString(); いずれにしても、動作します。今のところ...助けてくれてありがとうNolly J –

関連する問題