1

1つで複数のデータ項目を渡そうとしていますIntent

if (strActStat == "Sedentary") {
    // passactStat.putString("keySedentary", strActStat);
    // passSeden.putString("keyMale", gender);
    i = new Intent(CalorieTrackerTargetWeight.this, TargetWeightResults.class);
    i.putExtra("keyGender", gender);
    i.putExtra("keyAct", strActStat);
    //i.putExtra("keyAct", strActStat);

    startActivity(i);
}

なぜこれが機能しないのですか?1つで複数のアイテムを渡せないのはなぜIntentですか?

4

4 に答える 4

6

文字列を と比較することはできません==

if (strActStat.equals("Sedentary")) { // should work

編集:

@Hesam はかなり詳細な回答を書いていますが、彼のソリューションは実際には使用できません。を使用する代わりに、 を使用するArrayList<String>必要がありますputExtra(key, value)。なんで?ArrayList ソリューションよりもいくつかの利点があります。

  1. ArrayList のタイプに限定されません
  2. リスト内で静的な順序を維持する必要はありません。インデックス値を操作してリストを取得することしかできないため、put()が と同じ順序になっていることを確認する必要がありますget()。次のケースを考えてみてください: 3 つの値を送信することがよくありますが、場合によっては 2 番目の値を送信したくない場合があります。ArrayList ソリューションを使用するnullと、2 番目の値として送信することになり、3 番目の値がその場所に留まるようになります。これは非常に紛らわしいコーディングです。代わりに、2 つの値を送信するだけで、受信アクティビティが 2 番目の値を受信しようとすると、返される null を必要に応じて処理できます。たとえば、デフォルト値に置き換えます。
  3. キーに名前を付けると、何が入っているかを常に知ることができます...
  4. Yourkeyは、受け取るアクティビティで定数として宣言する必要があります。したがって、この定数を見ることで、アクティビティが処理できるインテント データを常に把握できます。これは良いプログラミングです!

これがインテントの使用法を少し明確にするのに役立つことを願っています。

于 2012-09-02T08:53:20.290 に答える
1

これだけが問題ではないと思います。まず、if (strActStat == "Sedentary")これが間違っています。この方法で文字列と比較することはできません。このように、オブジェクトは文字列ではなく比較されるためです。正しい方法はif (strActStat.equalIgnoreCase("Sedentary")).

Parcelableを使用すると、1 つのインテントで複数のデータを渡すことができます。

も使えますArrayList<String>。必要なコードのスケルトンは次のとおりです。

宣言リスト

private List<String> test;

適切な場所の初期化リスト

test = new ArrayList<String>();

必要に応じてデータを追加してテストします。

次のようにインテントに渡します。

Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) test);

次のようにデータを取得します。

ArrayList<String> test = data.getStringArrayListExtra("test");

それが役立つことを願っています。

于 2012-09-02T08:53:27.713 に答える
0

これを試して:

done.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                namevalue=name.getText().toString();
                overvalue=over.getText().toString();
                audiostatus=audio.getText().toString();
                Intent intent=new Intent(Settings.this,home.class);
                 Bundle bundle = new Bundle();   
                 bundle.putString( "namevalue",namevalue);  
                 bundle.putString("overvalue",overvaluse);
                 bundle.putInt("value",variablename);
                 intent.putExtras(bundle);   
                 startActivity(intent);                 
                }
            });
于 2013-05-24T04:51:55.610 に答える
0

私は同じ問題に直面しました。私の間違いは、転送していた変数の 1 つが初期化されていなかったことです。あなたの場合の性別strActStatのように。

于 2014-05-03T14:11:45.567 に答える