2015-01-14 70 views
1

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

    } 
+0

我不知道,但我想你想一个额外的参数(我不知道如果这是你问) – keyser

+0

难道这些方法定义在XML中点击监听器?如果是,那么我将不得不给你另一种解决方案。 – Rohit5k2

回答

0

创建一个可变的外部机器人^ h这样

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

} 
+0

好了,遗憾的是它不工作...让我试着解释我的应用程序是如何工作的:这是一个非常基本的应用程序,计算最大摄氧量,有一个“的EditText”如果用户插入值,那么,当一个活动他按下“计算”按钮,调用方法“vo2maxCalculo”,计算完成,然后结果显示在TextView中。还有一个“共享”按钮,调用方法“shareIt”。我的想法是让用户通过电子邮件等方式分享计算结果......这就是我无法工作的原因。 – Vladimir

+0

为什么我不提议工作?它会给你一个错误? –

+0

好吧,不是错误......它只是打印了“结果是:”的消息,没有结果本身。就像它没有从“msg1” – Vladimir

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

而另一种方法没有变化

+0

不知道,但我猜这些都是的onClick方法,通过为它们设置这样'String'将是无效的返回类型的方式。同样,问题是目前还不清楚,所以也许不会 – codeMagic

+0

如果两者都单击从XML听众那么这整个概念是错误的!让我们看看OP对此有何评论。 – Rohit5k2

+0

对不起,不清楚!我想从字符串“MSG 1”,也就是在方法“vo2maxCalculo”的价值和方法“shareIt” – Vladimir

0

的范围尝试这样

全部移动widgets的所有初始化在onCreate(...)Activity

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做这样

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

的propper笏是使用全局变量(如前面提到的),并更新内部vo2maxCalculo这个变量,它被称为后。另一种方法 - 你可以使用`resultado5.getText()。toString();从resultado5中提取文本。

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

0

最后,与你的宝贵帮助所有的问题解决和工作的代码是:

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

}

公共无效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")); 

}

感谢大家花了大量时间帮助我解决问题!

相关问题