jigar
jigar

Reputation: 1591

intent not working when swiching from one activity to another

I have made a simple android program with two activities,in that 1st activity contains an edittext and a button,and second activity contain a textview.Now when the button in 1st activity pressed the text from Edittext should go to 2nd activity's textView.I have tried code as below,but it's not working:

MainActivity.java

package com.example.myweb;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
     public final static String EXTRA_MESSAGE = "com.example.myweb";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button b =(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 EditText ed = (EditText)findViewById(R.id.edit_msg);
                Intent i = new Intent(getApplicationContext(),Act2.class);
            String s= ed.getText().toString();

            i.putExtra("EXTRA_MESSAGE", s);
                startActivity(i);

            }
        });

    }

}

Act2.java

package com.example.myweb;

import org.w3c.dom.Text;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Act2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        Button b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            TextView tv = (TextView)findViewById(R.id.tv1); 
                Intent i =getIntent();
                String msg = i.getStringExtra(MainActivity.EXTRA_MESSAGE);
            tv.setText(msg);

            setContentView(tv);





            }
        });
    }
}

please help me.thank you

Upvotes: 1

Views: 18679

Answers (9)

User
User

Reputation: 1271

    Use this code 

    **MainActivity.java**

        public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.button1);
        final EditText editText = (EditText)findViewById(R.id.editText1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                 intent.putExtra("EXTRA_MESSAGE", editText.getText().toString());
                startActivity(intent);

            }
        });


    }

}

**activity_main.xml**

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="74dp"
        android:layout_marginTop="26dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:layout_marginLeft="69dp"
        android:layout_marginTop="47dp"
        android:text="Button" />

</RelativeLayout>

**SecondActivity.java**

public class SecondActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // TODO Auto-generated method stub

        setContentView(R.layout.second);

        Intent intent = getIntent();
        final String message = intent.getStringExtra("EXTRA_MESSAGE");

     Button button = (Button)findViewById(R.id.button1);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                TextView textView = new TextView(SecondActivity.this);
                textView.setText(message);

                setContentView(textView);

            }
        });
    }

}


**second.xml** 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />



</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tester"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.tester.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>
    </application>

</manifest>

Upvotes: 1

Rushabh Patel
Rushabh Patel

Reputation: 3080

Value of the EXTRA_MESSAGE variable in MainActivity.java is different then the key value that you are putting message in to intent.

MainActivity.java:

public final static String EXTRA_MESSAGE = "com.example.myweb";

i.put("EXTRA_MESSAGE",s);

Act2.java: (you are accessing by extra_message variable which is not correct)

Intent i = getIntent();
String text = i.getStringExtra(MainActivity.EXTRA_MESSAGE); //WHICH IS DIFFER FROM THE KEY VALUE

So key value should be the same at the time of setting and getting the value. here while setting the value key is "EXTRA_MESSAGE" and while getting "com.example.myweb" so you will get null pointer exception.

SOLUTION:

just change the line in Act2.java

Intent i = getIntent();
String text = i.getStringExtra("EXTRA_MESSAGE");

Also check your menifest file for the activities declaration.

Hope it may help you.

Upvotes: 0

AndroidEnthusiastic
AndroidEnthusiastic

Reputation: 931

please review and change your code its works

  package com.example.activityact;

  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.EditText;

  public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);


   Button b =(Button)findViewById(R.id.button1);
   b.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {
           // TODO Auto-generated method stub

            EditText ed = (EditText)findViewById(R.id.editText1);
           Intent i = new Intent(getApplicationContext(),Act2.class);
       String s= ed.getText().toString();

       i.putExtra("EXTRA_MESSAGE", s);
           startActivity(i);

       }
   });

  }

 }

Act2.java

package com.example.activityact;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class Act2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act2);
    // TODO Auto-generated method stub
    TextView tv = (TextView) findViewById(R.id.textView1);
    Intent i =getIntent();
    // String msg = i.getStringExtra(EXTRA_MESSAGE);
    //String receiver = getIntent().getStringExtra(EXTRA_MESSAGE);
    String message = i.getStringExtra("EXTRA_MESSAGE");
    tv.setText(message);

}

 }

Upvotes: 0

Chintan Soni
Chintan Soni

Reputation: 25267

Just try this:

In MainActivity.java:

declare Button b and EditText ed as a class field (i.e. keep it outside onCreate())

class MainActivity.java
{
Button b;
EditText ed;
...

onCreate() {
...
        b =(Button)findViewById(R.id.button1);
ed = (EditText)findViewById(R.id.edit_msg);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub


                Intent i = new Intent(MainActivity.this,Act2.class);
            String s= ed.getText().toString();

            i.putExtra("EXTRA_MESSAGE", s);
                startActivity(i);

            }
        });
...

In Act2.java:

    ...
    Intent i = getIntent();
    String msg = i.getStringExtra("EXTRA_MESSAGE");


    TextView tv = (TextView)findViewById(R.id.tv1); 
tv.setText(msg);
     Button b1=(Button)findViewById(R.id.button1);
            b1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub



                }
            });
    ...

Upvotes: 3

MysticMagicϡ
MysticMagicϡ

Reputation: 28823

Change

String msg = i.getStringExtra(MainActivity.EXTRA_MESSAGE);

to

String msg = i.getStringExtra("EXTRA_MESSAGE");

MainActivity.EXTRA_MESSAGE would mean a static variable of MainActivity.java class. Hope you get the difference. You need the variable EXTRA_MESSAGE which you had put in intent i

Edit: For your crash, we need a logcat o/p and activity, manifest code. But possible reasons:

  1. Activity Act2.java is not declared in manifest file.

  2. You said you have only a textview in second activity. But you are trying to get button1 from act2.xml. So you are getting Force close.

Change Act2.java 's onCreate() as

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act2);

    TextView tv = (TextView)findViewById(R.id.tv1); 
    Intent i =getIntent();
    String msg = i.getStringExtra("EXTRA_MESSAGE");
    tv.setText(msg);
}

You don't need to call setContentView(tv); as it is already there in act2.xml and you are using setContentView(R.layout.act2);

Hope your problem gets solved.

Upvotes: 3

Linga
Linga

Reputation: 10553

You are using

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

So, in MainActivity

i.putExtra(EXTRA_MESSAGE, s);
startActivity(i);

(OR)

String message = intent.getStringExtra("EXTRA_MESSAGE");

also,

i.putExtra("EXTRA_MESSAGE", s);

Upvotes: 3

Linga
Linga

Reputation: 10553

You are using

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

So, in MainActivity

i.putExtra(EXTRA_MESSAGE, s);
startActivity(i);

Upvotes: 0

Tomer B
Tomer B

Reputation: 5465

Did you remember to correctly define your second activity in the manifest XML?

Check out this great guide for anything else you might have missed: http://developer.android.com/training/basics/firstapp/starting-activity.html

Upvotes: -1

Neoh
Neoh

Reputation: 16164

Try

Intent i = new Intent(MainActivity.this,Act2.class);

Upvotes: 0

Related Questions