jbeasley
jbeasley

Reputation: 19

NullPointerException with and intent Android

I have a switch class to determine phone or tablet and I get a null pointer exception when the intent is created. I am just wondering what is causing this as both activities exist and the switch is working correctly as the intent it errors out on switches when on a phone of tablet.

Here is the code for the initial activity that launches the respective activity:

package jack.beastapps.TimerPlus;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;

public class SplashScreen extends Activity {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


public boolean isTablet() { 
try { 
    Context context = this;
    // Compute screen size 
    DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
    float screenWidth  = dm.widthPixels / dm.xdpi; 
    float screenHeight = dm.heightPixels / dm.ydpi; 
    double size = Math.sqrt(Math.pow(screenWidth, 2) + 
                            Math.pow(screenHeight, 2)); 

    // Tablet devices should have a screen size greater than 6 inches 
    return size >= 6; 
} catch(Throwable t) { 
    return false; 
}
}{
if ( isTablet() == true ) {
        Intent tablet = new Intent(SplashScreen.this, TabletActivity.class);
       startActivity(tablet);
}
else {
        Intent phone = new Intent(SplashScreen.this, PhoneActivity.class);
        startActivity(phone);
}

Here is the logcat for the force close on startup:

09:34:08.454: E/AndroidRuntime(12322): FATAL EXCEPTION: main
04-07 09:34:08.454: E/AndroidRuntime(12322): java.lang.RuntimeException: Unable to         instantiate activity        
ComponentInfo{jack.beastapps.TimerPlus/jack.beastapps.TimerPlus.SplashScreen}:   java.lang.NullPointerException
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.os.Looper.loop(Looper.java:137)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread.main(ActivityThread.java:4424)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at java.lang.reflect.Method.invokeNative(Native Method)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at java.lang.reflect.Method.invoke(Method.java:511)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at dalvik.system.NativeStart.main(Native Method)
04-07 09:34:08.454: E/AndroidRuntime(12322): Caused by: java.lang.NullPointerException
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.content.ComponentName.<init>(ComponentName.java:75)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.content.Intent.<init>(Intent.java:3122)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at jack.beastapps.TimerPlus.SplashScreen.<init>(SplashScreen.java:36)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at java.lang.Class.newInstanceImpl(Native Method)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at java.lang.Class.newInstance(Class.java:1319)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
04-07 09:34:08.454: E/AndroidRuntime(12322):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
04-07 09:34:08.454: E/AndroidRuntime(12322):    ... 11 more

Upvotes: 1

Views: 1171

Answers (2)

Basile Perrenoud
Basile Perrenoud

Reputation: 4112

Your code is not properly indented, it is difficult to understant what you do.

can you try this: (as @Dirk Jäckel suggested)

package jack.beastapps.TimerPlus;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;

public class SplashScreen extends Activity {

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

        if ( isTablet() == true ) {
            Intent tablet = new Intent(SplashScreen.this, TabletActivity.class);
            startActivity(tablet);
        }
        else {
            Intent phone = new Intent(SplashScreen.this, PhoneActivity.class);
            startActivity(phone);
        }
    }


    public boolean isTablet() 
    { 
        try { 
            Context context = this;
            // Compute screen size 
            DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
            float screenWidth  = dm.widthPixels / dm.xdpi; 
            float screenHeight = dm.heightPixels / dm.ydpi; 
            double size = Math.sqrt(Math.pow(screenWidth, 2) + 
                        Math.pow(screenHeight, 2)); 

            // Tablet devices should have a screen size greater than 6 inches 
            return size >= 6; 
        } catch(Throwable t) { 
            return false; 
        }
    }
}

Tell use if you still get an error

Upvotes: 0

Dirk J&#228;ckel
Dirk J&#228;ckel

Reputation: 3025

this cannot be used in methods called from the constructor, because the object isn't there yet. You should create the Intent in onCreate(). No Code (except the constructor, or static initializers) from the Activity is run before onCreate(). So you won't need it before onCreate().

Upvotes: 1

Related Questions