【问题标题】:Android MainActivity print/convert the value into 0/null?Android MainActivity 打印/将值转换为 0/null?
【发布时间】:2016-07-21 02:27:32
【问题描述】:

主活动

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

}

结果日志

 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.. 它应该显示(示例数据) 输入:3 输出:1

那么有人可以帮助我吗?还是我的方法不对?

已经尝试过sharedpreference和intent bundle

【问题讨论】:

  • 你把值传到哪里去了?不就是新建一个Calc即时调用pIn和pOut,不设置PassIN、PassOut吗?
  • ooo 所以 int pIN = A.pIN(); int pOUT = A.pOUT();不传值?如何设置 PassIN、PassOUT?抱歉,我是 android 新手
  • 在你的Calc类中,你可以添加一个构造函数,public Calc(int pin, int pout){ this.pin = pin; this.pout=pout; } 然后改变 Calc A = new Calc();到 Calc A = new Calc(3,1);
  • 你可以在这里查看如何创建构造函数:homeandlearn.co.uk/java/class_constructor.html
  • 感谢您的链接,但据我所知,如果我们将其声明为示例“3”,它确实很有帮助,但我的总是改变..我试图用其他变量替换,但不能

标签: java android android-intent sharedpreferences


【解决方案1】:

您没有设置 pIN 和 pOUT 值。因为您将 pIN 和 pOUT 声明为公共变量,所以您可以这样设置它们。

Calc A = new Calc();
A.PassIN = 3;
A.PassOUT = 1;

正如上面提到的@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
}

编辑:

使用您提供的代码,更改PassINPassOUT 的唯一方法是调用Kappa()

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

我猜测 trnsferRP 值会发生变化,因此您可能希望将 public void Kappa() 的签名更改为 public void Kappa(String trnsferRP),以便您可以传入字符串。

【讨论】:

  • 对不起,我很困惑,变量不会总是提示出 3 和 1。这个数据 VDV2b0301(由套接字接收)将被转换为十六进制和十进制,所以它不是默认的,这只是一个示例。如果我这样声明,它将始终提示 3 和 1 .. 所以我想做的是计算类 Calc 中的数据以传递给 MainActivity。 .Calc A = new Calc();无法应用。
  • @WafiIsmail 查看我对答案的编辑。使用您提供的代码,int pIN = A.pIN();int pOUT = A.pOUT(); 不会自行执行任何操作。它们只会返回 0,因为您从不直接初始化 PassIN 和 PassOUT。只有 Kappa() 方法会更改 PassIN 和 PassOut。您必须调用 Kappa()。
  • 谢谢你,你帮我破解了我的最后一个难题。从昨天开始一直在工作。这是我的应用程序崩溃的最后一部分。我很感激你的帮助,现在我明白了跨度>
猜你喜欢
  • 2014-09-12
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多