Android 将字符串从一个方法传递到另一个方法

Android 将字符串从一个方法传递到另一个方法,android,string,methods,Android,String,Methods,我是android开发新手,开始学习一些东西。。。 我想知道如何实现一件我知道是非常基本的事情,但我找不到一种方法来用我对Android编程的实际知识来实现它。已经试了几个小时了,结果还是没有结果!我在stack overflow上发现了很多问题,有人问同样的问题,我试了很多,但都没有成功 我编写了以下代码,有两个方法(vo2maxCalculo和shareIt),“share it”方法应该从MSG1变量中获取值,并将该值插入到“shareBody”字符串中,以便用户可以通过电子邮件等方式共享

我是android开发新手,开始学习一些东西。。。 我想知道如何实现一件我知道是非常基本的事情,但我找不到一种方法来用我对Android编程的实际知识来实现它。已经试了几个小时了,结果还是没有结果!我在stack overflow上发现了很多问题,有人问同样的问题,我试了很多,但都没有成功

我编写了以下代码,有两个方法(vo2maxCalculo和shareIt),“share it”方法应该从MSG1变量中获取值,并将该值插入到“shareBody”字符串中,以便用户可以通过电子邮件等方式共享

我该怎么做

多谢各位



如果我理解正确,那么这就是解决方案。而且我相信在几乎每种编程语言中,这都是这样做的

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

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

}
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"));
}
像这样试试

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

}
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"));
}
活动的
onCreate(…)
中移动所有
小部件的所有初始化

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
的单独类,并在Utils类中创建一个静态计算方法,并在
onClick
事件中调用该方法(通过这种方式,您可以从任何类调用此方法)

在这些按钮的
onClick
中,执行以下操作

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

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

如果这些方法在其他活动中,您应该在创建活动或在singleTon中保存数据时传递intent(仅适用于大型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);
}

公共无效共享IT(视图五){

}


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

我不确定,但我认为您需要一个额外的参数(我不确定您是否在问这个问题)这些方法是用xml定义的单击侦听器吗?如果是,那么我将不得不给你另一个解决方案。不确定,但我猜这两种方法都是onClick方法,所以
String
将是无效的返回类型。同样,这个问题还不清楚,所以可能不是。如果两者都是xml的单击侦听器,那么整个概念就错了!让我们看看OP对此有何评论。抱歉不清楚!我想从方法“vo2maxCalculo”中的字符串“msg1”中获取值,并将该值插入方法“shareIt”中的字符串“shareBody”中,然后您可以看到我的答案。我看起来这些是onClick方法,需要更改特定的方法签名,这将导致应用程序功能中断。很遗憾,它不起作用。。。让我试着解释一下我的应用程序是如何工作的:它是一个计算最大摄氧量的非常基本的应用程序,有一个“编辑文本”活动,用户在其中插入值,然后,当他按下“计算”按钮时,调用方法“vo2maxCalculo”,计算完成,结果显示在文本视图中。还有一个“Share”按钮,用于调用方法“shareIt”。我的想法是让用户通过电子邮件等方式分享计算结果。。。这就是我不能做的。好吧,不是一个错误。。。它只打印了消息“结果是:”,而没有结果本身。就像它没有从“msg1”中获取值一样,我发现了你的错误。在你的String.format()中,你缺少了一个%s。请再次尝试上面的代码,看看它是否有效。太棒了!!!成功了!!非常感谢SuNny_sYeD,感谢所有帮助我解决这个问题和提高我知识的人!!!!令人惊叹的!很高兴你成功了。你能接受这个答案吗?谢谢