Cuong Le
Cuong Le

Reputation: 51

Android application closes on click

I do my android app , but I have a bug I don't know how to fix it. My code is below :

This is my Main Activity :

public class MainActivity extends Activity {
private ImageView imgHot;

public final static String EXTRA_MESSAGE="com.cuonglm.KhoHinh.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imgHot=(ImageView)findViewById(R.id.imageViewHot);


    imgHot.setOnClickListener(toContentHot);

}
View.OnClickListener toContentHot=new View.OnClickListener() {  

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent content=new Intent(MainActivity.this,ContentActivity.class);
        String signal="1";
        content.putExtra(EXTRA_MESSAGE,signal);
        startActivity(content);         
    }
};

And this is my second Activity :

public class ContentActivity extends Activity {
private TextView viewMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent content=getIntent();
    String messageReceive=content.getStringExtra(MainActivity.EXTRA_MESSAGE);

    viewMessage=(TextView)findViewById(R.id.content_receive);
    viewMessage.setText(messageReceive);        

    setContentView(R.layout.activity_content);
}

I want to click on the image on the Main Activity , string "1" or number "1" will send to the Second Activity via Intent and view on the TextView.

But my app will be close "Unfortunately..."

Thanks

Upvotes: 1

Views: 90

Answers (3)

codeMagic
codeMagic

Reputation: 44571

You need to call setContentView() in your second Activity before trying to access any of the Views in that layout. Change it to

   public class ContentActivity extends Activity {

   private TextView viewMessage;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_content);
      Intent content=getIntent();
      String messageReceive=content.getStringExtra(MainActivity.EXTRA_MESSAGE);

      viewMessage=(TextView)findViewById(R.id.content_receive);
      viewMessage.setText(messageReceive);        
  }

If this doesn't fix your problem then please post your logcat so we can see the error. Also always post logcat in the future when your app crashes. They aren't always this easy to see.

Also, I'm not sure you understand how putExtra() works. It is a key, value pair so when you put EXTRA_MESSAGE as the key then that is what you would use to retrieve the value added in the second param. So the way you are doing it may work if the Activity gets destroyed but it looks really strange to me and probably not realy safe or efficient. I would change it to something like

content.putExtra("message",signal);

in your first Activity then get it with

String messageReceive = content.getStringExtra("message");

in your second Activity

Upvotes: 3

Swayam
Swayam

Reputation: 16354

You need to set the layout before trying to reference the Views associated with it.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent content=getIntent();
    String messageReceive=content.getStringExtra(MainActivity.EXTRA_MESSAGE);

    setContentView(R.layout.activity_content);

    viewMessage=(TextView)findViewById(R.id.content_receive);
    viewMessage.setText(messageReceive);        

}

Upvotes: 2

Raghunandan
Raghunandan

Reputation: 133560

Change to

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
viewMessage=(TextView)findViewById(R.id.content_receive);
viewMessage.setText(messageReceive);    

In your ContentActivity

findViewById looks for a view with the id for the current infalted layout. SO you need to set the content of your layout to the activity first and then initialize your views.

You are probably gettting NullPointerException coz your initialization fails.

Upvotes: 4

Related Questions