Addy
Addy

Reputation: 1115

Nullpointer Exception in Fragments

In my App, I have two activities Login and Signup along with Main Activity. I have used fragments to get Tabs with swipe gesture. I am getting Nullpointerexception. Please help me.

My code is here..

MainActivity:

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Login", "Login with Facebook", "Registration" };

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


        // Initilization
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }

        /**
         * on swiping the viewpager make respective tab selected
         * */
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

}

LoginActivity:

public class LoginActivity extends Fragment {

    // Your Facebook APP ID
    private static String APP_ID = "270865596396516";

    // Instance of Facebook Class
    private Facebook facebook = new Facebook(APP_ID);
    @SuppressWarnings("unused")
    private AsyncFacebookRunner mAsyncRunner;
    String FILENAME = "AndroidSSO_data";
    public SharedPreferences mPrefs;

    Button login, signup, login_facebook, forgot, button_getprofile;;

    EditText uname, pwd;

    String name, password;

    ConnectivityManager mConnectivityMgr;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.login, container, false);

        login = (Button) getActivity().findViewById(R.id.login_btn);
        login_facebook = (Button) getActivity().findViewById(R.id.facebook_btn);
        button_getprofile = (Button) getActivity().findViewById(
                R.id.btn_get_profile);
        forgot = (Button) getActivity().findViewById(R.id.text_forgot);

        uname = (EditText) getActivity().findViewById(R.id.user_et);
        pwd = (EditText) getActivity().findViewById(R.id.pwd_et);

        login_facebook.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Log.d("Image Button", "button Clicked");

                loginToFacebook();

            }
        });

        // by reference from andfroidhive...

        /*
         * button_getprofile.setOnClickListener(new OnClickListener() {
         * 
         * @Override public void onClick(View v) { // TODO Auto-generated method
         * stub getProfileInformation();
         * 
         * } });
         */

        login.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                if ((uname.length() >= 4) && (pwd.length() > 0)) {

                    name = uname.getText().toString().trim();
                    password = pwd.getText().toString().trim();

                    callWebService();

                } else {
                    if ((uname.length() < 12)) {
                        uname.setError("enter valid username");
                    } else if ((pwd.length() <= 0)) {
                        pwd.setError("enter valid password");
                    }
                }
            }

        });

        return rootView;
    }

    public void loginToFacebook() {

        mPrefs = getActivity().getPreferences(Context.MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (access_token != null) {
            facebook.setAccessToken(access_token);

            login_facebook.setVisibility(View.INVISIBLE);

            button_getprofile.setVisibility(View.VISIBLE);

            Log.d("FB Sessions", "" + facebook.isSessionValid());
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(getActivity(), new String[] { "email",
                    "publish_stream" }, new DialogListener() {

                @Override
                public void onCancel() {
                    // Function to handle cancel event
                }

                @Override
                public void onComplete(Bundle values) {
                    // Function to handle complete event
                    // Edit Preferences and update facebook acess_token
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", facebook.getAccessToken());

                    editor.putLong("access_expires",
                            facebook.getAccessExpires());

                    editor.commit();

                    // Making Login button invisible
                    login_facebook.setVisibility(View.INVISIBLE);
                    button_getprofile.setVisibility(View.VISIBLE);

                }

                @Override
                public void onError(DialogError error) {
                    // Function to handle error

                }

                @Override
                public void onFacebookError(FacebookError fberror) {
                    // Function to handle Facebook errors

                }

            });

        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        facebook.authorizeCallback(requestCode, resultCode, data);

    }

    /*
     * @SuppressWarnings("deprecation") public void getProfileInformation() {
     * mAsyncRunner.request("me", new RequestListener() {
     * 
     * @Override public void onComplete(String response, Object state) {
     * Log.d("Profile", response); String json = response; try { // Facebook
     * Profile JSON data JSONObject profile = new JSONObject(json);
     * 
     * // getting name of the user final String name =
     * profile.getString("name");
     * 
     * // getting email of the user final String email =
     * profile.getString("email");
     * 
     * Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " +
     * email, Toast.LENGTH_LONG).show();
     * 
     * runOnUiThread(new Runnable() {
     * 
     * @Override public void run() { Toast.makeText(getApplicationContext(),
     * "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show(); }
     * 
     * });
     * 
     * } catch (JSONException e) { Toast.makeText(getApplicationContext(),
     * "...." + e, Toast.LENGTH_LONG).show(); e.printStackTrace(); } }
     * 
     * @Override public void onIOException(IOException e, Object state) { }
     * 
     * @Override public void onFileNotFoundException(FileNotFoundException e,
     * Object state) { }
     * 
     * @Override public void onMalformedURLException(MalformedURLException e,
     * Object state) { }
     * 
     * @Override public void onFacebookError(FacebookError e, Object state) { }
     * }); }
     */

    // database authentication...from SQLite database....
    public void callWebService() {

        try {
            SQLiteDatabase database = getActivity().openOrCreateDatabase(
                    "studentDB", 0, null);
            Cursor c = database.query("login", null, null, null, null, null,
                    null);

            while (c.moveToNext()) {
                String c1 = c.getString(0);
                String c2 = c.getString(1);

                if (c1.equals(name)) {
                    if (c2.equals(password)) {
                        Toast.makeText(LoginActivity.this.getActivity(),
                                "" + c1 + "     Welcome to Smarteach..",
                                Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getActivity(),
                                SignupActivity.class);
                        startActivity(intent);
                    } else {
                        Toast.makeText(LoginActivity.this.getActivity(),
                                "Incorrect Password", Toast.LENGTH_SHORT)
                                .show();
                    }
                } else {
                    Toast.makeText(LoginActivity.this.getActivity(),
                            "Incorrect Username", Toast.LENGTH_SHORT).show();
                }
            }
            database.close();
        } catch (Exception e) {
            Log.d("Login class", e.toString());
            Toast.makeText(LoginActivity.this.getActivity(),
                    "No records found with these credentials",
                    Toast.LENGTH_SHORT).show();
        }
    }

}

Signup Activity:

public class SignupActivity extends Fragment {

    EditText email, pswd, cnfrm, mobile;
    Button register, cancel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.registration, container,
                false);

        email = (EditText) getActivity().findViewById(R.id.ed_email);
        pswd = (EditText) getActivity().findViewById(R.id.ed_pswd);
        cnfrm = (EditText) getActivity().findViewById(R.id.ed_cnfrm);
        mobile = (EditText) getActivity().findViewById(R.id.ed_mobile);

        register = (Button) getActivity().findViewById(R.id.btn_reg);
        cancel = (Button) getActivity().findViewById(R.id.btn_can);

        register.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                String mail = email.getText().toString();
                String password = pswd.getText().toString();
                String confirmpswd = cnfrm.getText().toString();
                String phonenumber = mobile.getText().toString();

                if (mail.matches("[a-zA-Z0-9._-]+@[a-z]+.[a-z]+")
                        && mail.length() > 0) {

                    if (password.equals(confirmpswd)) {

                        if (phonenumber.length() > 0) {
                            // creating a database and storing the credentials
                            // into it...

                            try {
                                SQLiteDatabase database = getActivity()
                                        .openOrCreateDatabase("studentDB", 0,
                                                null);
                                // String create =
                                // "create table if not exists student(emai varchar(20),password varchar(20),mobile varchar(20));";
                                String create1 = "create table if not exists login(emailid varchar(28),pass varchar(20))";
                                database.execSQL(create1);
                                // database.execSQL(create);
                                // String insert =
                                // "insert into student values('"+mail+"','"+password+"','"+phonenumber+"');";
                                String insert1 = "insert into login values('"
                                        + mail + "','" + password + "')";
                                // database.execSQL(insert);
                                database.execSQL(insert1);
                                database.close();
                                /*
                                 * startActivity(new
                                 * Intent(SignupActivity.this.getActivity(),
                                 * AnimatedSliding.class));
                                 */
                                // startActivity(new Intent(Registration.this,
                                // Login.class));
                            } catch (Exception e) {
                                Toast.makeText(
                                        SignupActivity.this.getActivity(),
                                        e.toString(), Toast.LENGTH_SHORT)
                                        .show();
                            }

                            Toast.makeText(
                                    getActivity().getApplicationContext(),
                                    "your account successfully created...",
                                    Toast.LENGTH_LONG).show();
                        } else {

                            mobile.setError("enter min 10 digits..");
                        }

                    } else if (pswd.length() < 4) {
                        pswd.setError("enter min 4 digits");
                        cnfrm.setError("enter correct password..");
                    }

                } else {
                    email.setError("enter valid email ID..");
                }

            }
        });

        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                getActivity().finish();
            }
        });

        return rootView;

    }

}

Logcat:

01-27 13:10:36.361: D/AndroidRuntime(1033): Shutting down VM
01-27 13:10:36.371: W/dalvikvm(1033): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
01-27 13:10:36.381: E/AndroidRuntime(1033): FATAL EXCEPTION: main
01-27 13:10:36.381: E/AndroidRuntime(1033): java.lang.NullPointerException
01-27 13:10:36.381: E/AndroidRuntime(1033):     at info.androidhive.tabsswipe.LoginActivity.onCreateView(LoginActivity.java:61)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.View.measure(View.java:12603)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.os.Looper.loop(Looper.java:137)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at android.app.ActivityThread.main(ActivityThread.java:4340)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at java.lang.reflect.Method.invoke(Method.java:511)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-27 13:10:36.381: E/AndroidRuntime(1033):     at dalvik.system.NativeStart.main(Native Method)
01-27 13:13:52.910: D/AndroidRuntime(1080): Shutting down VM
01-27 13:13:52.910: W/dalvikvm(1080): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
01-27 13:13:52.920: E/AndroidRuntime(1080): FATAL EXCEPTION: main
01-27 13:13:52.920: E/AndroidRuntime(1080): java.lang.NullPointerException
01-27 13:13:52.920: E/AndroidRuntime(1080):     at info.androidhive.tabsswipe.LoginActivity.onCreateView(LoginActivity.java:61)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.View.measure(View.java:12603)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.os.Looper.loop(Looper.java:137)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at android.app.ActivityThread.main(ActivityThread.java:4340)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at java.lang.reflect.Method.invoke(Method.java:511)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-27 13:13:52.920: E/AndroidRuntime(1080):     at dalvik.system.NativeStart.main(Native Method)
01-27 13:18:52.971: I/Process(1080): Sending signal. PID: 1080 SIG: 9

Upvotes: 1

Views: 1084

Answers (3)

Aashir
Aashir

Reputation: 2621

1. Replace all the getActivity() in your LoginActivitys onCreateView(...) with rootView

2. Make sure your defined layout elements are in the same xml

Upvotes: 1

Denys Vasylenko
Denys Vasylenko

Reputation: 2143

In OnCreateView() replace all getActivity() to rootView, for example:

login = (Button) rootView.findViewById(R.id.login_btn);

Upvotes: 1

vipul mittal
vipul mittal

Reputation: 17401

change:

login = (Button) getActivity().findViewById(R.id.login_btn);
        login_facebook = (Button) getActivity().findViewById(R.id.facebook_btn);
        button_getprofile = (Button) getActivity().findViewById(
                R.id.btn_get_profile);
        forgot = (Button) getActivity().findViewById(R.id.text_forgot);

        uname = (EditText) getActivity().findViewById(R.id.user_et);
        pwd = (EditText) getActivity().findViewById(R.id.pwd_et);

to:

   login = (Button) rootView.findViewById(R.id.login_btn);
    login_facebook = (Button) rootView.findViewById(R.id.facebook_btn);
    button_getprofile = (Button) rootView.findViewById(
            R.id.btn_get_profile);
    forgot = (Button) rootView.findViewById(R.id.text_forgot);

    uname = (EditText) rootView.findViewById(R.id.user_et);
    pwd = (EditText) rootView.findViewById(R.id.pwd_et);

The thing is until onCreateView returns a view, this fragment is not attached to the activity. So getActivity().findViewById wont be able to find the view. So you can simply find the view from rootView. Or put this code in onAttach event in fragment.

Upvotes: 1

Related Questions