2016-05-05 3 views
-1

こんにちは私はStackoverflowとGoogleを検索しました。私はエラーが私が変数電子メールを開始していないと信じています。しかし、自分のエラーがどこにあるのかわかりません。どんな助けもありがとう。ありがとう。java.lang.NullPointerException:仮想メソッド 'java.lang.Stringを呼び出しようとしました。

私が得るエラーはです。

致命的な例外:メインプロセス:com.xxx.loginandregistration、PID:5821 java.lang.NullPointerExceptionが仮想メソッドを呼び出す試み 「java.lang.Stringでcom.xxx.loginandregistration.User.getEmail( 「) retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall $ 1 $ 1.run(ExecutorCallAdapterFactory.javで com.xxx.loginandregistration.LoginFragment $ 1.onResponse(LoginFragment.java:105) で nullオブジェクト参照の...:

私のエラーは私のloginPrにあると思います私は何が間違っているのか分かりません。

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); 
      } 

私の完全なコード

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(); 
    } 
} 
+0

仮想メソッドを呼び出すために '試み「はjava.lang.String型com.xxx.loginandregistration.User.getEmailを(与えresp.getUser()から返さ) '' - あなたが 'getEmail()'を呼び出す 'User'インスタンスはnullです。添付されたコードのどこにでもgetEmailを呼び出さないので、どこにコードを添付しませんでした。この行には 'editor.putString(Constants.EMAIL、resp.getUser()。getEmail());'と 'resp.getUser()'がヌルです – Shark

+0

あなたのServerResponseの内部にnull参照があります。応答内のgetUser() – Krish

答えて

0

editor.putString(Constants.EMAIL,resp.getUser().getEmail());この行は、エラーの原因となっています。

オブジェクトがnullあるので、ヌルオブジェクトのgetEmail()メソッドを呼び出すと、あなたにNullPointerException

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

+0

こんにちは私は私のエラーを把握することができました。私は自分のPHPサーバコードでreturn文を見つけられませんでした。ありがとう。 – hozdaman

関連する問題

 関連する問題