Question

I am still new to Java programming in general and I'm now trying to tackle instantiating, and encountering some problems. I have tried to make as simple as possible way to test this, however my program will force close.

*My Class

public class InterfaceScreen extends Activity implements testInterface1 {
TextView tv1, tv2;
String String1 = "I ate a pizza!";
String String2 = "sleeping......";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_interface_screen);
    tv1 = (TextView)findViewById(R.id.textView1);
    tv2 = (TextView)findViewById(R.id.textView3);   

    //Attempint to create a new InterfaceScreen (which is an animal by the way....)
    InterfaceScreen myAnimal = new InterfaceScreen();

    //now telling our animal to eat and sleep
    myAnimal.eat(String1);
    myAnimal.sleep(String2);

}
public void eat(String text1) {
    tv1.setText(text1);
}

public void sleep(String text2) {
    tv2.setText(text2);
}

}

*My interface screen, again making it as easy as possible.

public interface testInterface1 {

    void eat(String text1);
    void sleep(String text2);
}

XML for my activity

  <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=".InterfaceScreen" >

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_below="@+id/textView2"
    android:layout_marginTop="21dp"
    android:text="TextView" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="30dp"
    android:text="TextView" />

 </RelativeLayout>

Log Cat output

02-28 16:03:36.621: E/AndroidRuntime(2557): FATAL EXCEPTION: main
02-28 16:03:36.621: E/AndroidRuntime(2557): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.generaljavalearning/com.example.generaljavalearning.InterfaceScreen}: java.lang.NullPointerException
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.os.Looper.loop(Looper.java:137)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at java.lang.reflect.Method.invokeNative(Native Method)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at java.lang.reflect.Method.invoke(Method.java:525)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at dalvik.system.NativeStart.main(Native Method)
02-28 16:03:36.621: E/AndroidRuntime(2557): Caused by: java.lang.NullPointerException
02-28 16:03:36.621: E/AndroidRuntime(2557):     at com.example.generaljavalearning.InterfaceScreen.eat(InterfaceScreen.java:33)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at com.example.generaljavalearning.InterfaceScreen.onCreate(InterfaceScreen.java:28)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.Activity.performCreate(Activity.java:5133)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-28 16:03:36.621: E/AndroidRuntime(2557):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
02-28 16:03:36.621: E/AndroidRuntime(2557):     ... 11 more
Was it helpful?

Solution

In onCreate, you already operating inside an instance of InterfaceScreen. It's called this. You don't need to create a new instance.

Instead of

myAnimal.eat(String1);
myAnimal.sleep(String2);

just say

this.eat(String1);
this.sleep(String2);

or even better

eat(String1);
sleep(String2);

Also, variables typically start with a lowercase letter: string1 and string2. Classes start with an uppercase letter.

The NullPointerException was happening because your new instance wasn't getting correct tv1 and tv2 references. In Android, we don't make instances of our Activitys.

OTHER TIPS

Not exactly sure what you are trying to do here but you don't instantiate an Activity like you do a normal Java class. So this is wrong

InterfaceScreen myAnimal = new InterfaceScreen();

You would just call something like

eat(String1);

It looks like you would possibly want a normal Java class called something like Animal. Then you could instantiate it like you are trying to do and set/get properties. But just for what you are doing you can do by just calling the method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top