-4

Splash Screen

public class SplashScreen extends AppCompatActivity {

// Splash screen timer
private static int SPLASH_TIME_OUT = 3000;

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

    new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

        @Override
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);

            // close this activity
            finish();
        }
    }, SPLASH_TIME_OUT);
}

MainActivity

public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private Toolbar toolbar;

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

    if (savedInstanceState == null) {
        Fragment fragment = null;
        Class fragmentClass = ProductFragment.class;
        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
    }

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    initNavigationDrawer();
}

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hong.user.healthyfx">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".SplashScreen"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar"
        android:label="@string/app_name">
    </activity>
</application>

Error in logcat 03-28 11:20:22.921 11653-11653/com.hong.user.healthyfx E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hong.user.healthyfx, PID: 11653 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hong.user.healthyfx/com.hong.user.healthyfx.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:380) at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:430) at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:421) at com.hong.user.healthyfx.MainActivity.onCreate(MainActivity.java:42) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6119)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Line 42 in MainActivity: fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();

May I know where is my mistake? Thank you.

Jackie
  • 3
  • 3
  • Can you make sure your fragment is not null as you expecting to get exception in fragment = (Fragment) fragmentClass.newInstance(); and if there is exception so your fragment will be null and you are pushing the null fragment in stack. – VikasGoyal Mar 28 '17 at 03:34
  • Possible duplicate of [What is a NullPointerException, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Manoj Perumarath Mar 28 '17 at 03:58
  • show your xml layout where fragment container is being defined. You must make sure you initialized the container before using it within the replace method. – HaroldSer Mar 28 '17 at 17:26

4 Answers4

1

Update your activity OnCreate() method as:

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

    if (savedInstanceState == null) {

       Fragment  fragment = new ProductActivity(); // Change fragment class name to ProductFragment

       FragmentManager fragmentManager = getSupportFragmentManager();
       fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
    }
    .........
    ..............
}
Ferdous Ahamed
  • 21,438
  • 5
  • 52
  • 61
0

I found the problem in your code:-

It is your MainActivity:-

public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private Toolbar toolbar;

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

    if (savedInstanceState == null) {
        Fragment fragment = null;
        //How can you provide activity class for fragment initialization and push it in fragment stack.
        Class fragmentClass = **ProductActivity.class**;
        //It supposed to be fragment class not Activity.

        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
    }

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    initNavigationDrawer();
}
VikasGoyal
  • 3,308
  • 1
  • 22
  • 42
0

Try this

if (savedInstanceState == null) {
        Fragment fragment = ProductActivity.newInstance();
        //How can you provide activity class for fragment initialization and push it in fragment stack.


        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
    }
Kiran Benny Joseph
  • 6,755
  • 4
  • 38
  • 57
0

change your code in MainActivity to:

if (savedInstanceState == null) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.flContent, new ProductActivity()).commit();
}

For best readability you need rename

ProductActivity

to

ProductFragment
Shoad
  • 192
  • 1
  • 6