-4

Hello my question is about my app is crash after I am trying to hit next fragment. Code is compiling but i don't know how to solve this problem. Something with onclicklistner. I tried some solutions but didn't succeed.

This is my code:

ProfileFragment.java

package com.statusionew.statusio.fragments;

import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button;

import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.statusionew.statusio.ForgetchangePasswordActivity; import com.statusionew.statusio.LoginActivity; import com.statusionew.statusio.R; import com.statusionew.statusio.MainActivity;


import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick;


public class ProfileFragment extends BaseFragment implements View.OnClickListener{

    FirebaseAuth auth;
    FirebaseUser user;
    ProgressDialog PD;

    @BindView(R.id.sign_out_button) Button btnSignOut;

    @BindView(R.id.change_password_button) Button btnChangePass;

    @BindView(R.id.change_email_button) Button  btnChangeEmail;

    @BindView(R.id.delete_user_button) Button btnDeleteUser;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.activity_setting, container, false);

        ButterKnife.bind(getActivity(), view);

        ((MainActivity) getActivity()).updateToolbarTitle("Profile");


        return view;

    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        auth = FirebaseAuth.getInstance();
        user = auth.getCurrentUser();
        PD = new ProgressDialog(getActivity());
        PD.setMessage("Loading...");
        PD.setCancelable(true);
        PD.setCanceledOnTouchOutside(false);

        btnSignOut.setOnClickListener(new View.OnClickListener() {
            @Override
            @OnClick(R.id.sign_out_button)
            public void onClick(View view) {
                auth.signOut();

                FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() {
                    @Override
                    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                        FirebaseUser user = firebaseAuth.getCurrentUser();
                        if (user == null) {
                            Intent intent = new Intent(getActivity(), LoginActivity.class);
                            startActivity(intent);
                        }

                    }



                };
            }

        });

        btnChangePass.setOnClickListener(new View.OnClickListener() {
            @Override
            @OnClick(R.id.change_password_button)
            public void onClick(View view) {
                startActivity(new Intent(getActivity().getApplicationContext(), ForgetchangePasswordActivity.class).putExtra("Mode", 1));
            }
        });

        btnChangeEmail.setOnClickListener(new View.OnClickListener() {
            @Override
            @OnClick(R.id.change_email_button)
            public void onClick(View view) {
                startActivity(new Intent(getActivity().getApplicationContext(), ForgetchangePasswordActivity.class).putExtra("Mode", 2));
            }
        });

        btnDeleteUser.setOnClickListener(new View.OnClickListener() {
            @Override
            @OnClick(R.id.delete_user_button)
            public void onClick(View view) {
                startActivity(new Intent(getActivity().getApplicationContext(), ForgetchangePasswordActivity.class).putExtra("Mode", 3));
            }
        });

    }

    @Override
    public void onClick(View v) {
        if (auth.getCurrentUser() == null) {
            startActivity(new Intent(getActivity(), LoginActivity.class));
            getActivity().finish();
        }
        super.onResume();
    } }

this the log that say 'Attempt to invoke virtual method'-

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.statusionew.statusio, PID: 9206
                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at com.statusionew.statusio.fragments.ProfileFragment.onCreate(ProfileFragment.java:65)
                      at android.support.v4.app.Fragment.performCreate(Fragment.java:2339)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1377)
                      at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1109)
                      at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:996)
                      at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:99)
                      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2364)
                      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
                      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:781)
                      at com.statusionew.statusio.views.FragNavController.executePendingTransactions(FragNavController.java:631)
                      at com.statusionew.statusio.views.FragNavController.switchTab(FragNavController.java:142)
                      at com.statusionew.statusio.views.FragNavController.switchTab(FragNavController.java:158)
                      at com.statusionew.statusio.MainActivity.switchTab(MainActivity.java:149)
                      at com.statusionew.statusio.MainActivity.access$100(MainActivity.java:30)
                      at com.statusionew.statusio.MainActivity$1.onTabSelected(MainActivity.java:87)
                      at android.support.design.widget.TabLayout.dispatchTabSelected(TabLayout.java:1165)
                      at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1158)
                      at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1128)
                      at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1427)
                      at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1537)
                      at android.view.View$PerformClick.run(View.java:22429)
                      at android.os.Handler.handleCallback(Handler.java:751)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      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)
Connected to process 10580 on device emulator-5554
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/art: Not late-enabling -Xcheck:jni (already on)
W/art: Unexpected CPU variant for X86 using defaults: x86
W/System: ClassLoader referenced unknown path: /data/app/com.statusionew.statusio-1/lib/x86
D/FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
V/FA: Registered activity lifecycle callback
I/FirebaseInitProvider: FirebaseApp initialization successful
I/InstantRun: starting instant run server: is main process
E/InstantRun: IO Error creating local socket at com.statusionew.statusio
              java.io.IOException: Address already in use
                  at android.net.LocalSocketImpl.bindLocal(Native Method)
                  at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:308)
                  at android.net.LocalServerSocket.<init>(LocalServerSocket.java:48)
                  at com.android.tools.ir.server.Server.<init>(Server.java:91)
                  at com.android.tools.ir.server.Server.create(Server.java:85)
                  at com.android.tools.ir.server.InstantRunContentProvider.onCreate(InstantRunContentProvider.java:49)
                  at android.content.ContentProvider.attachInfo(ContentProvider.java:1751)
                  at android.content.ContentProvider.attachInfo(ContentProvider.java:1726)
                  at android.app.ActivityThread.installProvider(ActivityThread.java:5853)
                  at android.app.ActivityThread.installContentProviders(ActivityThread.java:5445)
                  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384)
                  at android.app.ActivityThread.-wrap2(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
                  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)
dazzieta
  • 662
  • 4
  • 20

1 Answers1

1

It seems like you've got some misunderstandings about how Fragments and ButterKnife work.

OnCreate is called BEFORE onCreateView in a Fragment. So all your views are null when you're trying to access them in onCreate.
See Fragment Lifecycle:
https://www.tutorialspoint.com/android/images/fragment.jpg

OnCreate is not used that much in Fragments, onCreateView is used more.

Your ButterKnife bind code is also wrong. You're trying to bind the Activity to the views in the Fragment. See ButterKnife documentation for correct usage: http://jakewharton.github.io/butterknife/

Moonbloom
  • 7,738
  • 3
  • 26
  • 38