【问题标题】:pass string from one method to another android将字符串从一个方法传递到另一个 android
【发布时间】:2015-03-13 05:42:41
【问题描述】:

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

    }

【问题讨论】:

  • 我不确定,但我认为您需要一个额外的参数(我不确定您是否要问这个)
  • 这些方法是xml中定义的点击监听吗?如果是,那么我将不得不给你另一个解决方案。

标签: android string methods


【解决方案1】:

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

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

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

其他方法没有变化

【讨论】:

  • 不确定,但我猜这两个都是 onClick 方法,所以 String 将是无效的返回类型。同样,这个问题还不清楚,所以可能不是
  • 如果两者都是来自 xml 的点击侦听器,那么整个概念都是错误的!让我们看看 OP 对此有何评论。
  • 抱歉不清楚!我想从方法“vo2maxCalculo”中的字符串“msg1”中获取值,并将该值插入方法“shareIt”中的字符串“shareBody”
  • 那你就可以看到我的答案了。
  • 我看起来这些是 onClick 方法,需要更改特定的方法签名,这将导致应用程序功能中断。
【解决方案2】:

像这样在两个范围之外创建一个变量

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

}

【讨论】:

  • 好吧,不幸的是它不起作用......让我试着解释一下我的应用程序是如何工作的:它是一个非常基本的应用程序,可以计算 Vo2Max,有一个带有一个“EditText”的用户活动插入值,然后,当他按下“计算”按钮时,调用方法“vo2maxCalculo”,计算完成,然后结果显示在 TextView 中。还有一个“共享”按钮,它调用“shareIt”方法。我的想法是让用户通过电子邮件等方式分享计算结果……而这就是我做不到的。
  • 好吧,不是错误...它只是打印了消息“结果是:”,没有结果本身。就像它没有从“msg1”中获得价值
  • 我发现了你的错误。在您的 String.format() 中,您缺少 %s 再次尝试上面的代码,看看它是否有效。
  • 太棒了!!!有效!!非常感谢 Sunny_sYeD,也感谢所有帮助我解决这个问题和提高我的知识的人!!!!
  • 太棒了!很高兴你让它工作。你能接受这个答案吗?谢谢。
【解决方案3】:

这样试试

将所有widgets 的所有初始化移动到您的ActivityonCreate(...)

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 事件中调用它(通过这种方式,您可以从任何类中调用此方法)

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

【讨论】:

    【解决方案4】:

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

    另一种方式 - 您可以使用 `resultado5.getText().toString(); 从 resultado5 中提取文本;

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

    【讨论】:

      【解决方案5】:

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

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

      }

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        相关资源
        最近更新 更多