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)
私はまだFirebaseを使用していませんでしたが、私は( 'updateProfileを想像) 'は非同期です。つまり、表示名が次の行で検索しようとするまでに更新されていないことを意味します。 –
ええ、[ドキュメント](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)を返します。 –
それは、あなたがnullpointerを引き起こしていると思いますか? – tccpg288