¿Por qué mi screen2 recibe null.null de screen1 cuando uso i.putExtra?

Estoy escribiendo un libro de recetas y he encontrado un problema, mi screen2 recibe null.null cuando envío información desde screen1...

Este es mi código para la lista de botones de recetas:

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;

    }
}

Esta es mi receta_display_screen:

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;

    }

}

Alguna idea, solución??? Gracias por adelantado :)

PS Este es mi 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

preguntado el 03 de mayo de 12 a las 18:05

4 Respuestas

    Intent i = getIntent();
    String Ingredients = i.getStringExtra("textview1"); <--- see diff TextView1
    String Method = i.getStringExtra("textview2"); <--- see diff TextView2
    Log.e("recipedisplayscreen", Ingredients + "." + Method);

cuando estás pasando valor estás usando T y V chica

y t y v están en capital donde están obteniendo valores

contestado el 04 de mayo de 12 a las 09:05

¿Entiendes esto cuál era el problema? - dirección MAC

sí, estoy esperando 5 minutos más para que el sitio web me permita aceptar su respuesta: P, gracias: D - Bercik

@ gtumca-MAC Curiosamente, cambió el problema de la carcasa original por otro en su código. La publicación original siempre tiene la "v" en "Ver" en mayúscula tanto en put como en get. La idea de la respuesta es ciertamente correcta, ya que es un problema con la carcasa de la llave. - kabuko

La sensibilidad a mayúsculas y minúsculas es fundamental para este tipo de transmisión de datos

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

donde "T" comienza el nombre extra de la cadena vs:

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

Donde "t" comienza el nombre extra de la cadena.

Cambia las cuerdas para que coincidan y estarás bien.

contestado el 03 de mayo de 12 a las 18:05

Las claves que está utilizando en su código actual están en minúsculas (p. ej. textView1) cuando pones, pero en mayúsculas cuando obtienes (p. ej. TextView1). Eso significa que no estás encontrando el extra cuando lees. Asegúrese de utilizar la misma clave. Simplemente podría cambiar el caso para que coincida, pero encuentro una manera fácil de evitar este problema por completo es usar una variable estática común:

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

Entonces puedes usarlo:

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

y:

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

Es posible que deba descubrir una clase específica para colocarlo, etc., pero es una buena estrategia. La propia plataforma Android también usa esto. (Ver Intent, p.ej EXTRA_ALARM_COUNT).

contestado el 03 de mayo de 12 a las 19:05

solo un pequeño error. aquí

Cambiar:

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

Con:

String Ingredients = i.getStringExtra("textView1");
String Method = i.getStringExtra("textView2");

contestado el 08 de mayo de 14 a las 07:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.