2016-07-21 16 views
1

MainActivityAndroid MainActivityは値を0に印刷/変換しますか?

public class MainActivity extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Calc A = new Calc(); 
    int pIN = A.pIN(); 
    int pOUT = A.pOUT(); 

    System.out.println("IN : " + pIN); 
    System.out.println("OUT : " + pOUT); 

} 

} 

clasccのCalc - 未活動

public class Calc extends MainActivity { 


public int PassIN; 
public int PassOUT; 

public String convertStringToHex(String str) { 

    char[] chars = str.toCharArray(); 

    StringBuffer hex = new StringBuffer(); 
    for (int i = 0; i < chars.length; i++) { 
     hex.append(Integer.toHexString((int) chars[i])); 
    } 

    return hex.toString(); 
} 

public String convertHexToDec(String hex) { 

    StringBuilder sb = new StringBuilder(); 
    StringBuilder temp = new StringBuilder(); 

    for (int i = 0; i < hex.length() - 1; i += 2) { 

     String output = hex.substring(i, (i + 2)); 

     int decimal = Integer.parseInt(output, 16); 

     temp.append(decimal); 
    } 

    return temp.toString(); 
} 

public void Kappa() { 


    String trnsferRP = "VDV2b0301"; 

    Calc strToHex = new Calc(); 
    String hex = strToHex.convertStringToHex(trnsferRP); 
    Calc strToDec = new Calc(); 
    String dec = strToDec.convertHexToDec(hex); 

    String cut = dec.substring(10); 

    String A = cut.substring(0, 2); 
    String B = cut.substring(2, 4); 
    String C = cut.substring(4, 6); 
    String D = cut.substring(6, 8); 

    int cvA = Integer.parseInt(A); 
    int cvB = Integer.parseInt(B); 
    int cvC = Integer.parseInt(C); 
    int cvD = Integer.parseInt(D); 

    int calcA = (cvA - 48); 
    int calcB = (cvB - 48); 
    int calcC = (cvC - 48); 
    int calcD = (cvD - 48); 

    this.PassIN = calcA + calcB; 
    this.PassOUT = calcC + calcD; 
} 

public int pIN(){ 
    return PassIN; 
} 

public int pOUT(){ 
    return PassOUT; 
} 

} 

結果logcat

07-21 01:29:10.672 26194-26224/com.example.kappa.passvalue2 W/EGL_emulation: eglSurfaceAttrib not implemented 
07-21 01:29:10.672 26194-26224/com.example.kappa.passvalue2 W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xae3e3580, error=EGL_SUCCESS 
07-21 01:29:20.426 26373-26373/com.example.kappa.passvalue2 W/System: ClassLoader referenced unknown path: /data/app/com.example.kappa.passvalue2-1/lib/x86 
07-21 01:29:20.722 26373-26373/com.example.kappa.passvalue2 W/System: ClassLoader referenced unknown path: /data/app/com.example.kappa.passvalue2-1/lib/x86 
07-21 01:29:20.772 26373-26373/com.example.kappa.passvalue2 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
07-21 01:29:20.827 26373-26373/com.example.kappa.passvalue2 I/System.out: IN : 0 
07-21 01:29:20.827 26373-26373/com.example.kappa.passvalue2 I/System.out: OUT : 0 
07-21 01:29:20.837 26373-26399/com.example.kappa.passvalue2 D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 

私は値を渡すために問題を抱えている、私は計算値を渡すためにしようとしていますCalc [Activityではない]クラスからMainActivityに変換されて使用/プロンプト出力されます。値は0/nullになりました。 表示されるはずです(サンプルデータ) IN:3 OUT:1

だから誰でも助けてくれますか?または私の方法はこれを行う上で間違っている?

は、すでにあなたがピンとふくれっ面値を設定していないsharedpreferenceと意図バンドル

+0

どこに値を渡しましたか? PassIn、PassOutを設定せずに、単に新しいCalcのインスタントではなく、pInとpOutを呼び出しますか? – brian661

+0

ooo so int pIN = A.pIN(); int pOUT = A.pOUT(); 値を渡しませんか? PassIN、PassOUTの設定方法は? Calcクラスにandroid –

+0

があります。コンストラクタを追加することができます。 public Calc(int pin、int pout){ this.pin = pin; this.pout = pout; } を入力してから、Calc A = new Calc()を変更します。 to Calc A =新しいCalc(3,1); – brian661

答えて

2

を試してみました。 pINとpOUTをパブリック変数として宣言したため、このように設定できます。

前述の@ brian661は、PassIN変数とPassOUT変数を初期化するコンストラクタを作成することもできます。あなたが直接アクセスする必要はありませんので、その場合には、PassINとPassOUTはプライベートにすることを検討:

public class Calc extends MainActivity { 
    private int PassIN; 
    private int PassOUT; 
    public Calc(int PassIN, int PassOUT){ 
     this.PassIN = passIN; 
     this.PassOUT = passOUT; 
    } 
    //rest of class 
} 

編集:

を、PassINを変更する唯一の方法は、あなたが提供したコードを使用すると、 PassOUTKappa()に電話することです。

Calc A = new Calc(); 
A.Kappa(); 

私はtrnsferRP値が変化することを推測しているので、あなたはおそらく、あなたが代わりに文字列を渡すことができますpublic void Kappa(String trnsferRP)public void Kappa()の署名を変更したいと思います。

+0

申し訳ありませんが、私は混乱して、 このデータVDV2b0301(ソケットで受信)は16進数と10進数に変換されるため、デフォルトではこれは単なるサンプルです。そのように宣言すれば、それは常に3と1をプロンプトするので、私は何をしようとしているのですか?Calcのクラスのデータを計算してMainActivityに渡します。 .Calc A =新しいCalc();適用できません。 –

+0

@WafiIsmail私の回答を私の編集に見せてください。'と' int型POUT = A.pOUT();あなたが提供したコード、 'INT端子= A.pIN()で'自分で何もしません。あなたが直接PassINとPassOUTを初期化することはありませんので、彼らは単に0を返します。のみカッパ()メソッドは、PassINとPassOutを変更します。 Kappa()を呼び出す必要があります。 – Vinnie

+0

が、これは私のアプリがクラッシュ最後の部分..です昨日から取り組んでき.. uは私が私の最後のパズルを解読支援してきました、ありがとう..私は感謝し、喜んであなたは今、私はそれを理解 を助けます –

関連する問題