views:

142

answers:

2

Hi, I am here to seek some help with my code which i am facing a dead end road with. I'm trying to pass values from screen1.java using Intent to screen2.java. Passing the values is fine and I managed to get through it; however, when I check using if statement the program crash down. Here are my files, plzzzzzzzzzzz help

screen1.java

package test.android;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class screen1 extends Activity
{
    static String strKey = "Hello";
    static final String strValue = "Hello";

    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.screen1);

        //** button A      
        Button A = (Button) findViewById(R.id.btnClickA);
        A.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent i = new Intent(screen1.this, screen2.class);
                strKey = "NAME";
                i.setClassName("packageName", "packageName.IntentClass");
                String term = "Hello";
                i.putExtra("packageName.term", term);

                //i.putExtra(strKey, strValue);
                startActivity(i);
            }
        });
        //**
        //** button B      
        Button B = (Button) findViewById(R.id.btnClickB);
        B.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent i = new Intent(screen1.this, screen3.class);
                startActivity(i);
            }
        });
        //**

    }
}

screen2.java

package test.android;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class screen2 extends Activity
{
   public void onCreate(Bundle icicle)
   {
       Bundle extras = getIntent().getExtras();
        String term = extras.getString("packageName.term");

        System.out.println("--- Name  is  -->"+ term);

        if(term.equalsIgnoreCase("Hello") || term.equalsIgnoreCase("Name")){
            super.onCreate(icicle);
            setContentView(R.layout.screen3);
            Button b = (Button) findViewById(R.id.btnClick3);
            b.setOnClickListener(new View.OnClickListener() {
                public void onClick(View arg0) {
                    setResult(RESULT_OK);
                    finish();
                }
            });
        } else {
            super.onCreate(icicle);
            setContentView(R.layout.screen2);
            Button b = (Button) findViewById(R.id.btnClick2);
            b.setOnClickListener(new View.OnClickListener() {
                public void onClick(View arg0) {
                    setResult(RESULT_OK);
                    finish();
                }
            });
        }
        // DOES NOT WORK !!!!!!!!!
        System.out.println("--- Name  is  -->"+ term);


    }
}

Layouts: screen1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="You are in the first Screen"
/>
<Button
  android:id ="@+id/btnClickA"
  android:background="@drawable/sleep0"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Open Screen 2"
/>
<Button
  android:id ="@+id/btnClickB"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Open Screen 3"
/>
<ImageView android:id="@+id/icon" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:src="@drawable/icon"
android:layout_gravity="center"/>
</LinearLayout>

screen2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="You are in Screen 2"
/>
<Button
  android:id ="@+id/btnClick2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Close"
/>
</LinearLayout>

screen3.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- ScrollView: will allow the layout to be scroll Up/Down and Left/right  -->
<ScrollView
   android:id="@+id/widget54"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android"
   >
<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:scrollbars="vertical"

>
<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="You are in Screen 3"
/>
<Button
  android:id ="@+id/btnClick3"
  android:background="@drawable/sss"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Close"
/>
<ImageView android:id="@+id/sssq"  android:layout_width="fill_parent"
android:layout_height="fill_parent" android:src="@drawable/sssq"
android:layout_gravity="center"  />

</LinearLayout>
</ScrollView>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="test.android">
   <application android:icon="@drawable/icon">

      <activity android:name="screen1"
                        android:label="SCREEN 1">

         <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>

      </activity>
      <activity android:name="screen2"
                        android:label="SCREEN 2">
      </activity>

      <activity android:name="screen3"
                        android:label="SCREEN 3">
      </activity>  
   </application>
</manifest>

===== The error is caused by these lines of code in screen2.java:

  if(term.equalsIgnoreCase("Hello") || term.equalsIgnoreCase("Name")){
      super.onCreate(icicle);
      setContentView(R.layout.screen3);
      Button b = (Button) findViewById(R.id.btnClick3);
      b.setOnClickListener(new View.OnClickListener() {
         public void onClick(View arg0) {
         setResult(RESULT_OK);
         finish();
         }
      });
  }
  else {
      super.onCreate(icicle);
      setContentView(R.layout.screen2);
      Button b = (Button) findViewById(R.id.btnClick2);
      b.setOnClickListener(new View.OnClickListener() {
          public void onClick(View arg0) {
              setResult(RESULT_OK);
              finish();
          }
      });
  }

**notice if I get rid of the entire IF statement and go with only the ELSE the program works fine.

A: 

i.setClassName("packageName", "packageName.IntentClass") is not required, if you are passing information to Intent constructor. Btw Is your Screen3 call working fine ?

Karan
so are you saying i should just cross that line out "i.setClassName("packageName", "packageName.IntentClass")"? and yes, calling screen3 works fine; when I click on Button B in the main screen (screen1.java) it sends me to screen3.
khalid
man thank you so much, I just commented that line out and it worked like a charm.
khalid
A: 

You're passing the data incorrectly, try this:

public void onClick(View arg0) {
                Intent i = new Intent(screen1.this, screen2.class);
                strKey = "NAME";
                //NO NEED FOR THIS, REMOVE -> i.setClassName("packageName", "packageName.IntentClass");
                String term = "Hello";
                //Add your string to a bundle:
                Bundle b = new Bundle();
                b.putString("packageName.term", term);
                //Then add the bundle to your intent
                i.putExtra(b);

                //i.putExtra(strKey, strValue);
                startActivity(i);
            }

The way you retrieve it in screen2 activity is fine, I would just check if term is null:

if(term != null && (term.equalsIgnoreCase("Hello") || term.equalsIgnoreCase("Name"))){

...

Ricardo Villamil