0

レシピ本を書いていて、screen1 から情報を送信すると、screen2 が null.null を受信するという問題が発生しました...

これは、recipe_button_list の私のコードです。

public class Recipe_Button_List extends Activity {

    TextView inputMethod;

    TextView inputIngredients;

    @Override
    public void onCreate( Bundle savedInstanceState ) {

        super.onCreate( savedInstanceState );
        setContentView( R.layout.recipe_button_list );

        inputMethod = (TextView) findViewById( R.id.textView2 );
        inputIngredients = (TextView) findViewById( R.id.textView1 );
        //remember when adding more intents to make sure that they are classed as TextView not EditText

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled( true );

        Button mainNext = (Button) findViewById( R.id.Recipe1 );
        mainNext.setOnClickListener( new OnClickListener() {

            public void onClick( View v ) {

                final TextView mTextView = (TextView) findViewById( R.id.textView1 );
                mTextView.setText( R.string.Test2 );
                final TextView mTextView2 = (TextView) findViewById( R.id.textView2 );
                mTextView2.setText( R.string.Test );
                Intent i = new Intent( getBaseContext(), recipedisplayscreen.class );
                //Sending data to the next screen
                i.putExtra( "textView1", inputIngredients.getText().toString() );
                i.putExtra( "textView2", inputMethod.getText().toString() );

                Log.e( "n", inputMethod.getText() + "." + inputIngredients.getText() );
                startActivity( i );
            }
        } );

        Button mainNext2 = (Button) findViewById( R.id.Recipe2 );
        mainNext2.setOnClickListener( new OnClickListener() {

            public void onClick( View v ) {

                final TextView mTextView = (TextView) findViewById( R.id.textView1 );
                mTextView.setText( R.string.Test );
                Intent i = new Intent( getBaseContext(), recipedisplayscreen.class );
                //Sending data to the next screen
                i.putExtra( "textView1", inputIngredients.getText().toString() );
                i.putExtra( "textView2", inputMethod.getText().toString() );

                Log.e( "n", inputMethod.getText() + "." + inputIngredients.getText() );
                startActivity( i );
            }
        } );
    }

    @Override
    public boolean onCreateOptionsMenu( Menu menu ) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate( R.menu.recipe_menu1, menu );
        return true;

    }
}

これは私のレシピ_ディスプレイ_スクリーンです:

public class recipedisplayscreen extends Activity {

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

        TextView MethodDisplay = (TextView) findViewById(R.id.textView3);
        TextView IngredientsDisplay = (TextView) findViewById(R.id.textView5);

        Intent i = getIntent();
        String Ingredients = i.getStringExtra("TextView1");
        String Method = i.getStringExtra("TextView2");
        Log.e("recipedisplayscreen", Ingredients + "." + Method);

        MethodDisplay.setText(Method);
        IngredientsDisplay.setText(Ingredients);


        ActionBar actionBar = getActionBar();
        setTitle(R.string.title);
        actionBar.setDisplayHomeAsUpEnabled(true);}

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    // App icon in action bar clicked; go home
                    Intent intent = new Intent(this, MainScreen.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }




     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.recipe_menu1, menu);
            return true;

    }

}

任意のアイデア、解決策??? 前もって感謝します :)

PSこれは私のlogcatです:

05-03 18:55:34.734: E/n(21132): if this is displaying then Intent activity is working correctly.bla bla bla working correctly
05-03 18:55:34.883: D/dalvikvm(21132): GC_FOR_ALLOC freed 101K, 2% free 12815K/12999K, paused 23ms
05-03 18:55:34.883: I/dalvikvm-heap(21132): Grow heap (frag case) to 13.885MB for 1401676-byte allocation
05-03 18:55:34.922: D/dalvikvm(21132): GC_CONCURRENT freed 7K, 2% free 14177K/14407K, paused 4ms+2ms
05-03 18:55:34.945: E/recipedisplayscreen(21132): null.null
4

4 に答える 4

1

このタイプのデータ受け渡しには、ケースの感度が重要です

String Method = i.getStringExtra("TextView2");

ここで、「T」は文字列の余分な名前を開始しますvs:

i.putExtra("textView2", inputMethod.getText().toString());

ここで、「t」は文字列の余分な名前を開始します。

一致するように文字列を切り替えれば、大丈夫です。

于 2012-05-03T17:59:10.637 に答える
1

現在のコードで使用しているキーはtextView1、置くときは小文字 (例: ) ですが、取得するときは大文字 (例: TextView1) です。つまり、読んだときに余分なものが見つからないということです。必ず同じキーを使用してください。一致するように大文字と小文字を変更することもできますが、この問題を完全に回避する簡単な方法は、共通の静的変数を使用することです。

public static final String EXTRA_INGREDIENTS = "com.your.namespace.Ingredients";

次に、それを使用できます。

Intent i = new Intent(getBaseContext(), recipedisplayscreen.class);
//Sending data to the next screen
i.putExtra(EXTRA_INGREDIENTS, inputIngredients.getText().toString());

と:

i.putExtra(EXTRA_INGREDIENTS, inputMethod.getText().toString());

それを入れる特定のクラスを考え出す必要があるかもしれませんが、それは良い戦略です。Android プラットフォーム自体もこれを使用します。(Intent例を参照してくださいEXTRA_ALARM_COUNT)。

于 2012-05-03T18:40:20.113 に答える
1
    Intent i = getIntent();
    String Ingredients = i.getStringExtra("textview1"); <--- see diff TextView1
    String Method = i.getStringExtra("textview2"); <--- see diff TextView2
    Log.e("recipedisplayscreen", Ingredients + "." + Method);

値を渡すときは、TVを小さく使用しています

tvは大文字で、値を取得しています

于 2012-05-03T17:56:04.007 に答える
1

ほんの些細なミス。ここ

変化する:

String Ingredients = i.getStringExtra("TextView1");
String Method = i.getStringExtra("TextView2");

と:

String Ingredients = i.getStringExtra("textView1");
String Method = i.getStringExtra("textView2");
于 2012-05-03T18:07:56.187 に答える