2017-10-26 7 views
0

DialogFragmentを使用してユーザー名を作成するようにユーザーに要求しています。私はdialogfragmentを表示するとDialogFragmentからアクティビティにデータを渡すときのNullPointer

、私は、ユーザーがユーザー名を入力するようにしたい、と私は戻って活動にそのユーザ名を渡し、そのFirebaseに書き込む:

DialogFragment:

public class DisplayNameDialogFragment extends DialogFragment { 

//TODO: Is this going to cause compile-time exception in these versions? 
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View mView = inflater.inflate(R.layout.fragment_display_name_dialog, null); 
    final EditText displayName = (EditText) mView.findViewById(R.id.display_name); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle(R.string.DISPLAY_NAME_LABEL); 
    builder.setView(mView); 
    builder.setPositiveButton(R.string.dialog_done, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      String displayNameEntered = displayName.getText().toString(); 
       listener.onFinishEditDialog(displayNameEntered); 
     } 
    }); 

    return builder.create(); 
} 

public static interface EditNameDialogListener { 
    public abstract void onFinishEditDialog(String inputText); 
} 

private EditNameDialogListener listener; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     this.listener = (EditNameDialogListener)getActivity(); 
    } catch (final ClassCastException e){ 
     throw new ClassCastException(getActivity().toString() + "must implement listener"); 
    } 
    } 
} 

受け取ります活動:

public class SignupActivity extends AppCompatActivity implements DisplayNameDialogFragment.EditNameDialogListener{ 
private static final String TAG = "SignupActivity"; 

@Bind(R.id.input_email) 
EditText _emailText; 
@Bind(R.id.input_password) 
EditText _passwordText; 
@Bind(R.id.btn_signup)........... 

@Override 
public void onFinishEditDialog(String inputText) { 
    FirebaseAuth auth = FirebaseAuth.getInstance(); 
    UserProfileChangeRequest m = new UserProfileChangeRequest.Builder() 
      .setDisplayName(inputText).build(); 
    FirebaseUser user = auth.getCurrentUser(); 
    user.updateProfile(m); 
    Log.v("INPUT_TEXT", user.getDisplayName()); 
    Toast.makeText(getApplicationContext(), inputText, Toast.LENGTH_LONG).show(); 
    Intent toHome = new Intent(SignupActivity.this, HomeActivity.class); 
    startActivity(toHome); 
     } 
} 

私はにNullPointerを受け付けており、その理由が不明:

java.lang.NullPointerException: println needs a message 
                     at android.util.Log.println_native(Native Method) 
                     at android.util.Log.v(Log.java:118) 
                     at com.troychuinard.fanpolls.SignupActivity.onFinishEditDialog(SignupActivity.java:367) 
                     at com.troychuinard.fanpolls.Fragment.DisplayNameDialogFragment$1.onClick(DisplayNameDialogFragment.java:39) 
                     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5527) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
+1

私はまだFirebaseを使用していませんでしたが、私は( 'updateProfileを想像) 'は非同期です。つまり、表示名が次の行で検索しようとするまでに更新されていないことを意味します。 –

+1

ええ、[ドキュメント](https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#updateProfile(com.google.firebase.auth.UserProfileChangeRequest))をチェックするとリスナを設定する['Task'](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task)を返します。 –

+0

それは、あなたがnullpointerを引き起こしていると思いますか? – tccpg288

答えて

1

変更

Log.v("INPUT_TEXT", user.getDisplayName()); 

エラーjava.lang.NullPointerException: println needs a message

Log.v("INPUT_TEXT", "" + user.getDisplayName()); 

には Logする必要があります。あなたのメッセージを意味する!= nullを

+0

+は何を表していますか? – tccpg288

+0

表示名がヌルであることを意味しますか? – tccpg288

+1

'logcat'エラーメッセージによると、私はそうだと思います –

関連する問題