I'm following the tutorial shown here https://developers.facebook.com/docs/android/login-with-facebook/v2.2
I'm receiving a Null Pointer Exception
12-16 19:28:21.319: E/AndroidRuntime(28446): FATAL EXCEPTION: main
12-16 19:28:21.319: E/AndroidRuntime(28446): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kpfunusa1/com.kpfunusa1.SplashScreen}: java.lang.NullPointerException
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2260)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread.access$600(ActivityThread.java:139)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.os.Handler.dispatchMessage(Handler.java:99)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.os.Looper.loop(Looper.java:156)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread.main(ActivityThread.java:5045)
12-16 19:28:21.319: E/AndroidRuntime(28446): at java.lang.reflect.Method.invokeNative(Native Method)
12-16 19:28:21.319: E/AndroidRuntime(28446): at java.lang.reflect.Method.invoke(Method.java:511)
12-16 19:28:21.319: E/AndroidRuntime(28446): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-16 19:28:21.319: E/AndroidRuntime(28446): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-16 19:28:21.319: E/AndroidRuntime(28446): at dalvik.system.NativeStart.main(Native Method)
12-16 19:28:21.319: E/AndroidRuntime(28446): Caused by: java.lang.NullPointerException
12-16 19:28:21.319: E/AndroidRuntime(28446): at com.kpfunusa1.MainFragment.onCreateView(MainFragment.java:67)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:571)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1195)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.Activity.performStart(Activity.java:4553)
12-16 19:28:21.319: E/AndroidRuntime(28446): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
12-16 19:28:21.319: E/AndroidRuntime(28446): ... 11 more
It's happening on startup with my initial class. It has something to do with the code I added from the tutorial indicated underneath /FACEBOOK FRAGMENT SETUP/
package com.fb_test_package;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.view.Display;
public class SplashScreen extends FragmentActivity {
// Splash screen timer
public static int height;
public static int width;
private static int SPLASH_TIME_OUT = 1;
//FB FRAGMENT
private MainFragment mainFragment;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.splash_screen_layout);
/* FACEBOOK FRAGMENT SETUP */
if (savedInstanceState == null) {
// Add the fragment on initial activity setup
mainFragment = new MainFragment();
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, mainFragment)
.commit();
} else {
// Or set the fragment from restored state info
mainFragment = (MainFragment) getSupportFragmentManager()
.findFragmentById(android.R.id.content);
}
if(android.os.Build.VERSION.SDK_INT >= 13){
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
width = size.x;
height = size.y;
}else{
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth(); // deprecated
height = display.getHeight();
}
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 in = getIntent();
String tab = in.getStringExtra("tab");
Intent i = new Intent(SplashScreen.this, ActivityLogin.class);
i.putExtra("tab", tab);
startActivity(i);
// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}
I can't seem to figure out what is causing this. Fragments is a new concept to me, perhaps I am initializing it incorrectly?
Here is the code from mainFragment that was causing the Null Pointer exception. As indicated in the answer. Turns out I was referencing the wrong view when trying to load my authButton. Because I was integrating the login to an existing app the layout containing the authButton was not main.
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main, container, false);
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_friends", "user_birthday", "user_location", "user_website", "user_likes", "user_status"));
return view;
}