-1

Hi I have searched through Stackoverflow and Google and I believe my error is I am not initiating the variable email. But I can't figure where my error is in my code. Any help would be appreciated. Thanks.

The error I am getting is.

FATAL EXCEPTION: main Process: com.xxx.loginandregistration, PID: 5821 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.xxx.loginandregistration.User.getEmail()' on a null object reference at com.xxx.loginandregistration.LoginFragment$1.onResponse(LoginFragment.java:105) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.jav...:

I think my error is in my loginProcess method but I am not sure what I am doing wrong.

  private void loginProcess(String email,String password){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RequestInterface requestInterface = retrofit.create(RequestInterface.class);

        User user = new User();
        user.setEmail(email);
        user.setPassword(password);
        ServerRequest request = new ServerRequest();
        request.setOperation(Constants.LOGIN_OPERATION);
        request.setUser(user);
        Call<ServerResponse> response = requestInterface.operation(request);

        response.enqueue(new Callback<ServerResponse>() {
            @Override
            public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {

                ServerResponse resp = response.body();
                Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();

                if(resp.getResult().equals(Constants.SUCCESS)){
                    SharedPreferences.Editor editor = pref.edit();
                    editor.putBoolean(Constants.IS_LOGGED_IN,true);
                    editor.putString(Constants.EMAIL,resp.getUser().getEmail());
                    editor.putString(Constants.FIRSTNAME,resp.getUser().getFirstname());
                    editor.putString(Constants.LASTNAME,resp.getUser().getLastname());
                    editor.putString(Constants.UNIQUE_ID,resp.getUser().getUnique_id());
                    editor.apply();
                    goToProfile();

                }
                progress.setVisibility(View.INVISIBLE);
            }

My full Code

import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.AppCompatButton;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by hozda_000 on 4/19/2016.
 */
public class LoginFragment extends Fragment implements View.OnClickListener {

    private AppCompatButton loginButton;
    private EditText emailEditText;
    private EditText passwordEditText;
    private TextView registerTextView;
    private ProgressBar progress;
    private SharedPreferences pref;

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

        View view = inflater.inflate(R.layout.fragment_login, container,false);
        initViews(view);
        return view;
    }

    private void initViews(View view) {
        pref = getActivity().getPreferences(0);

        loginButton = (AppCompatButton)view.findViewById(R.id.loginButton);
        registerTextView = (TextView)view.findViewById(R.id.registerTextView);
        emailEditText = (EditText)view.findViewById(R.id.emailEditText);
        passwordEditText = (EditText)view.findViewById(R.id.passwordEditText);

        progress = (ProgressBar)view.findViewById(R.id.progress);

        loginButton.setOnClickListener(this);
        registerTextView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch(v.getId()) {
            case R.id.registerTextView:
                goToRegister();
                break;

            case R.id.loginButton:
                String email = emailEditText.getText().toString();
                String password = passwordEditText.getText().toString();

                if(!email.isEmpty() && !password.isEmpty()) {
                    progress.setVisibility(View.VISIBLE);
                    loginProcess(email, password);
                } else {
                    Snackbar.make(getView(), "You have empty fields!", Snackbar.LENGTH_LONG).show();
                }
                break;
        }
    }

    private void loginProcess(String email,String password){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RequestInterface requestInterface = retrofit.create(RequestInterface.class);

        User user = new User();
        user.setEmail(email);
        user.setPassword(password);
        ServerRequest request = new ServerRequest();
        request.setOperation(Constants.LOGIN_OPERATION);
        request.setUser(user);
        Call<ServerResponse> response = requestInterface.operation(request);

        response.enqueue(new Callback<ServerResponse>() {
            @Override
            public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {

                ServerResponse resp = response.body();
                Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();

                if(resp.getResult().equals(Constants.SUCCESS)){
                    SharedPreferences.Editor editor = pref.edit();
                    editor.putBoolean(Constants.IS_LOGGED_IN,true);
                    editor.putString(Constants.EMAIL,resp.getUser().getEmail());
                    editor.putString(Constants.FIRSTNAME,resp.getUser().getFirstname());
                    editor.putString(Constants.LASTNAME,resp.getUser().getLastname());
                    editor.putString(Constants.UNIQUE_ID,resp.getUser().getUnique_id());
                    editor.apply();
                    goToProfile();

                }
                progress.setVisibility(View.INVISIBLE);
            }


            @Override
            public void onFailure(Call<ServerResponse> call, Throwable t) {

                progress.setVisibility(View.INVISIBLE);
                Log.d(Constants.TAG, "failed");
                Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();

            }
        });

    }

    private void goToRegister(){
        Fragment register = new RegisterFragment();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_frame, register);
        ft.commit();
    }

    private void goToProfile(){
        Fragment profile = new ProfileFragment();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_frame, profile);
        ft.commit();
    }
}
Sreehari
  • 5,621
  • 2
  • 25
  • 59
hozdaman
  • 319
  • 2
  • 5
  • 15
  • `Attempt to invoke virtual method 'java.lang.String com.xxx.loginandregistration.User.getEmail()'` - the `User` instance on which you're calling `getEmail()` is null. You didn't attach the code where it happens as you don't call getEmail anywhere in the attached code. Correction, it's on this line `editor.putString(Constants.EMAIL,resp.getUser().getEmail());` and `resp.getUser()` is null – Shark May 05 '16 at 13:23
  • May be there is null reference inside your ServerResponse .check for getUser() inside the response. – Krish May 05 '16 at 13:25

1 Answers1

0

editor.putString(Constants.EMAIL,resp.getUser().getEmail()); this line is causing error.

Object returned from resp.getUser()is null so calling getEmail() method on null object gives you NullPointerException

What is a NullPointerException, and how do I fix it?

Community
  • 1
  • 1
Karol Żygłowicz
  • 2,442
  • 2
  • 26
  • 35
  • Hi I was able to figure out my error. I was missing a return statement in my php server code. Thanks. – hozdaman May 11 '16 at 15:30