将字符串从一种方法传递到另一种方法 android

pass string from one method to another android

我是 android 开发新手,开始学习一些东西... 我想知道如何实现一件我知道非常基本的事情,但我无法用我对 Android 编程的实际知识找到实现它的方法。现在已经尝试了几个小时,但还是没有结果!我在这里发现了很多关于堆栈溢出的问题,人们问同样的事情,我已经尝试了很多,但终究没有成功!

我写了下面的代码,有 2 个方法(vo2maxCalculo 和 shareIt),"share it" 方法应该从 MSG1 变量中获取值并将这个值插入到 "shareBody" 字符串中,所以用户可以通过电子邮件等方式分享..

我该怎么做?

非常感谢!


        public void vo2maxCalculo(View v) {
        float minutos2;
        double calculo2;

        EditText minutos1 = (EditText) findViewById(R.id.minutos);
        TextView resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);


        minutos2 = Float.parseFloat(minutos1.getText().toString());

        calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
        String msg1 = String.format("%.2f", calculo2);
        resultado5.setText(msg1);


    }

    public void shareIt(View v) {

        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/plain");
        String shareBody = String.format("The result is:", msg1);
        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Final Result");
        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
        startActivity(Intent.createChooser(sharingIntent, "Share via"));

    }

如果我理解正确,那么这就是解决方案。我也确信几乎所有的编程语言都是这样完成的。

这两种方法似乎都是点击侦听器:仅当它们不是时才使用此方法

public String vo2maxCalculo(View v) { // changed here
    float minutos2;
    double calculo2;

    EditText minutos1 = (EditText) findViewById(R.id.minutos);
    TextView resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);


    minutos2 = Float.parseFloat(minutos1.getText().toString());

    calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
    String msg1 = String.format("%.2f", calculo2);
    resultado5.setText(msg1);

    return msg1; // added this

}

public void shareIt(View v) {

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    //String shareBody = String.format("The result is:", vo2maxCalculo(v)); // Why String.format???
    String shareBody = "The result is:" + vo2maxCalculo(v); // Replace this
    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Final Result");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    startActivity(Intent.createChooser(sharingIntent, "Share via"));

}

这两种方法似乎都是点击侦听器:如果确实如此,请使用此方法

String msg1 = ""; // Added this
public void vo2maxCalculo(View v) {
    float minutos2;
    double calculo2;

    EditText minutos1 = (EditText) findViewById(R.id.minutos);
    TextView resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);

    minutos2 = Float.parseFloat(minutos1.getText().toString());

    calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
    msg1 = String.format("%.2f", calculo2); // Edited this
    resultado5.setText(msg1);
}

其他方法没有变化

像这样在两个作用域之外创建一个变量

String msg1; //Like this
public void vo2maxCalculo(View v) {
    float minutos2;
    double calculo2;

    EditText minutos1 = (EditText) findViewById(R.id.minutos);
    TextView resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);


    minutos2 = Float.parseFloat(minutos1.getText().toString());

    calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
    msg1 = String.format("%.2f", calculo2); //Set it in here like this
    resultado5.setText(msg1);


}

public void shareIt(View v) {

    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");

    //Can still use it in here as long as the other method got called first
    String shareBody = String.format("The result is: %s", msg1);

    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Final Result");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    startActivity(Intent.createChooser(sharingIntent, "Share via"));

}

这样试试

移动 Activity

onCreate(...) 中所有 widgets 的所有初始化
minutos1 = (EditText) findViewById(R.id.minutos);//declare it globally at class level
resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);//declare it globally at class level

您可以单独创建一个名为 Utils 的 class 并在 Utils class 中创建一个用于计算的静态方法并在两个 onClick 事件中调用它(通过这种方式您可以从任何 class)

调用此方法
public static String calculate(float minutos2) {
    double calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
    String msg1 = String.format("%.2f", calculo2);
    return msg1;
}

onClick 个 Button 中这样做

public void vo2maxCalculo(View v) {
float minutos2;
String msg = minutos1.getText().toString().trim();
if(msg != null && !msg.equalsIgnoreCase(""))
    minutos2 = Float.parseFloat(msg);
else
    minutos2 = 0.00;

String msg1 = Utils.calculate(minutos2);
resultado5.setText(msg1);
}

public void shareIt(View v) {
    float minutos2;
    String msg = minutos1.getText().toString().trim();
    if(msg != null && !msg.equalsIgnoreCase(""))
        minutos2 = Float.parseFloat(msg);
    else
        minutos2 = 0.00;

    String msg1 = Utils.calculate(minutos2);
    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    String shareBody = String.format("The result is:", msg1);
    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Final Result");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    startActivity(Intent.createChooser(sharingIntent, "Share via"));
}

propper wat 是使用全局变量(如前所述)并在调用 vo2maxCalculo 后更新此变量。

另一种方法 - 您可以使用 `resultado5.getText().toString();

从 resultado5 中提取文本

您没有提到,但您可能无法成功实现 onClick 行为?在这种情况下,添加布局 xml 文件 android:onClick="vo2maxCalculo"android:onClick="shareIt" 如果这些方法在其他活动中,您应该在创建时传递意图 activity 或将数据保存在 singleTon 中(仅对大型 havie 单个对象有用,如位图)

最后,在各位的宝贵帮助下,所有问题都解决了,工作代码为:

String msg1; //Like this

public void vo2maxCalculo(View v) {
float minutos2;
double calculo2;

EditText minutos1 = (EditText) findViewById(R.id.minutos);
TextView resultado5 = (TextView) findViewById(R.id.vo2max12Resultado);


minutos2 = Float.parseFloat(minutos1.getText().toString());

calculo2 = 33 + 0.17 * (minutos2 - 1955) / 15;
msg1 = String.format("%.2f", calculo2); //Set it in here like this
resultado5.setText(msg1);

}

public void shareIt(查看 v) {

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");

//Can still use it in here as long as the other method got called first
String shareBody = String.format("The result is: %s", msg1);

sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Final Result");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share via"));

}

感谢所有花宝贵时间帮助我解决问题的人!