2017-05-11 5 views
-2

私は今のところ日中の回答を探していますが、それでも見つからないので、誰かが私を助けてくれることを願っています。Androidアプリのアクティビティ間で変数を渡す

私はXアクティビティを持っています。これらのアクティビティから異なる変数を1つのアクティビティに渡したいと思います。私はintentを使って余分なものを使うと、1つのアクティビティから最終的なアクティビティまでうまく動作しますが、2つのアクティビティから最終的なアクティビティまで使用すると、アプリケーションがクラッシュします。誰かが私にそれをする方法を教えてもらえますか?ここで

はX活動のexempleコードです:

public class AkyluxClass extends Activity { 

//Initialisation 
double prix; 
EditText longueur; 
EditText largeur; 
EditText quantite; 
TextView total; 
Button calcul, facturer, valider; 
float coefficient; 
public final static String COEF = "coefficient"; 
String test; 

double num1, num2, num3, resultat; 

@Override 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.akylux); 

    //Association layout/code 
    prix = 10.90; 
    longueur = (EditText) findViewById(R.id.longueur_akylux); 
    largeur = (EditText) findViewById(R.id.largeur_akylux); 
    quantite = (EditText) findViewById(R.id.quantite_akylux); 
    total = (TextView) findViewById(R.id.total_akylux); 
    calcul = (Button) findViewById(R.id.button_calcul_akylux); 
    facturer = (Button) findViewById(R.id.button_facturer); 
    valider = (Button) findViewById(R.id.valider_akylux); 
    coefficient = getPreferences(MODE_PRIVATE).getFloat(COEF, 1); 


    //Listener du bouton calcul 
    calcul.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      num1 = Double.parseDouble(longueur.getText().toString()); 
      num2 = Double.parseDouble(largeur.getText().toString()); 
      num3 = Double.parseDouble(quantite.getText().toString()); 
      resultat = ((num1 * num2)/10000) * num3 * prix * coefficient; 
      total.setText(Double.toString(resultat)); 

      if (num1 < 100) { 
       num1 = 100; 
      } 
      if (num2 < 100) { 
       num2 = 100; 
      } 

      if (num3 < 1) { 
       num3 = 1; 
      } 


     } 
    }); 


    //Listener du bouton valider 
    valider.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String valStr = String.valueOf(resultat); 
      Intent intent = new Intent(AkyluxClass.this, DevisClass.class); 
      intent.putExtra("akylux", valStr); 
      startActivity(intent); 
      } 
     }); 
    } 
    } 

そして、ここでは、最終的なアクティビティのコードは次のとおりです。それは1で作業している場合は

public class DevisClass extends Activity { 

//Initialisation des variables 
TextView valeur_akylux, valeur_blanc, valeur_carton, valeur_dibond, valeur_gris, valeur_pvc, total_Devis; 
Button facturer; 
double total_devis_double, resultat; 
String total; 


static AkyluxClass AkyluxClass; 
static PvcClass PvcClass; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.devis); 

    //Association layout/code 
    facturer = (Button) findViewById(R.id.button_facturer); 
    valeur_akylux = (TextView) findViewById(R.id.valeur_akylux_devis); 
    valeur_blanc = (TextView) findViewById(R.id.valeur_blanc_devis); 
    valeur_carton = (TextView) findViewById(R.id.valeur_carton_devis); 
    valeur_dibond = (TextView) findViewById(R.id.valeur_dibond_devis); 
    valeur_gris = (TextView) findViewById(R.id.valeur_gris_devis); 
    valeur_pvc = (TextView) findViewById(R.id.valeur_pvc_devis); 
    total_Devis = (TextView) findViewById(R.id.total_Devis); 


    //On récupère la variable passée via l'intent de la première classe 
    String akylux_extra = (String) getIntent().getSerializableExtra("akylux"); 

    //on l'attribue à un double pour avoir une valeur calculable 
    double valaky = Double.parseDouble(akylux_extra.trim()); 

    //On l'affiche sur le label du layout 
    valeur_akylux.setText(Double.toString(valaky)); 

    //Test : on l'attribue à un total 
    total_devis_double = Double.parseDouble(valeur_akylux.getText().toString()); 

    //resultat = valaky + blanc + carton + dibond + gris + pvc; 
     resultat = valaky; 

    //On transforme le total en String 
     total = String.valueOf(total_devis_double); 

    //On affiche le String total 
    total_Devis.setText(total); 

    //Listener du bouton facturer 
    facturer.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(Intent.ACTION_SEND); 
      i.setType("message/rfc822"); 
      i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); 
      i.putExtra(Intent.EXTRA_SUBJECT, "Votre facture deviseur ePrint"); 
      i.putExtra(Intent.EXTRA_TEXT , new String[]{"Voici le détail de votre facture : " , total, "total", "€"}); 
      //i.putExtra(Intent.EXTRA_TEXT , new String[]{total}); 
      try { 
       startActivity(Intent.createChooser(i, "Send mail...")); 
      } catch (android.content.ActivityNotFoundException ex) { 
       Toast.makeText(DevisClass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 
} 

+0

他のアクティビティコードも追加してください。 –

+1

とエラーログが役立ちます。 –

+0

@MilapPancholi彼らはほとんどすべて最初のものと同じです – Oxy180

答えて

1

あなたはアクティビティAにおいて、活性A.

にthaのデータを送信したい場所からホームのアクティビティAや他の多くの活動B、C、Dがあると、文字列タグを宣言します。その他の活動において

public static final String TAG_ACTIVITY_FROM = "WhichActivity"; 

、送信:

0123:Aで

//you can send as many data as you want in putExtra 

    Intent intent = new Intent(D.this, A.class); 
     intent.putExtra(A.TAG_ACTIVITY_FROM, "From_D"); 
    intent.putExtra(A.VALUE, 4); 
     startActivity(intent); 

を、とそれを取り戻します

if (getIntent().getExtras() != null) { 
      String activityFrom =(String)getIntent().getStringExtra(TAG_ACTIVITY_FROM); 
int value = getIntent().getIntExtra(VALUE, -1); 
     } 
+0

データを取得するときにgetIntent()。getDoubleExtra( "akylux"、-1); – Vishesh

+0

bcz double値を渡しています – Vishesh

+0

こんにちは、それはうまくいくようですが、-1の代わりに何を入れるべきですか? – Oxy180

0

をご協力いただきありがとうございます次のアクティビティで問題になることはありません。あなたがあなたに提示しない限り、わからないでしょう。ログ特にのエラーは、あなたが使用していない理由をインテントに入れ余分から離れて、表示:

があなたの全体のためにプリミティブデータ型を共有するための優れた方法だろうアプリの使用

乾杯。

+0

こんにちは、まずは、すばらしい答えをありがとうございます。でも、私はすでに共有設定を使用しようとしていて、動作させるためには分かりません。私はそれを使用すると何も起こりません。それはより良い解決策でしょうか?ありがとうございました – Oxy180

+0

ログによる最終アクティビティのnullpointerexceptionがあります – Oxy180

+0

これは素晴らしいので、最終アクティビティは何も受け取りません。ヌルチェックを追加して、オブジェクト/値メモリ内の参照は次の点に注意してください。public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";チュートリアル:https://developer.android.com/training/basics/firstapp/building-ui.html私の答え/返信がhelpfu/usefulの場合は、それを上げる。乾杯。 –

1

文字列を渡す場合、受信クラスの意図を文字列Extraを読み取るように変更し、nullバンドルチェックを追加することもできます。エラーログは、問題点を特定するのに役立ちます。そして、あなたがいずれかから値を渡すことができ

class Handler{ 
     //value 
     public static Double result = 0.0; 
     //set of values 
     public static List<Double> resultArr = new ArrayList<>(); 
     } 

:たぶんデータは

Bundle bdlExtra = getIntent().getExtras(); 
if(bdlExtra != null) { 
String akylux_extra =bdlExtra.getString("akylux"); 
} 
0

...正しく何とか保存されていません私はあなたが静的変数や関数を使用して、ハンドラまたはコントローラとしてクラスを使用することができると思います他のクラスを使用して、特にマルチスレッドデータ処理の場合は、最終アクティビティの値をテストします。 ホープヘルプ:)

0

多くの方法があります。 あなたの最初の活動で。 MyFirstActivity。java

String password="password"; 
String mypassword="sfsdf234234"; 
Intent myintent = new Intent(MyFirstActivity.this,MySecondActivity.class); 
myintent,putExtra("Email","[email protected]"); 
myintent.putExtra(password,mypassword); 
startActivity(myintent); 

今すぐあなたの2番目のアクティビティから。 MySecondActivity.javaでは、このようにデータを取得できます。

Intent myintent = getIntent(); 
String myPassword =myintent.getExtra("password"); 
String myEmail =myintent.getEXtra("email"); 

希望します。 You can also check this post. Same concept.

関連する問題