2015-01-14 94 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")); 

}

感謝大家花了大量時間幫助我解決問題!

相關問題