Android 在注册期间设置displayName

Android 在注册期间设置displayName,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在使用Firebase进行用户身份验证。当用户注册时,我希望他们能够有一个与其帐户关联的显示名称 现在,我正在使用一个通用的显示名“Jane Q.Users”,这是我在成功注册电子邮件/密码组合后设置的 当我尝试这样做时,会出现以下致命异常: 01-11 14:16:37.640 11076-11076/com.snapwebdevelopment.scanhappy E/AndroidRuntime: FATAL EXCEPTION: main

我正在使用Firebase进行用户身份验证。当用户注册时,我希望他们能够有一个与其帐户关联的显示名称

现在,我正在使用一个通用的显示名“Jane Q.Users”,这是我在成功注册电子邮件/密码组合后设置的

当我尝试这样做时,会出现以下致命异常:

01-11 14:16:37.640 11076-11076/com.snapwebdevelopment.scanhappy E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.snapwebdevelopment.scanhappy, PID: 11076
                                                                                  java.lang.NullPointerException: println needs a message
                                                                                      at android.util.Log.println_native(Native Method)
                                                                                      at android.util.Log.d(Log.java:143)
                                                                                      at com.snapwebdevelopment.scanhappy.SignupActivity$1.onComplete(SignupActivity.java:105)
                                                                                      at com.google.android.gms.tasks.zzc$1.run(Unknown Source)
                                                                                      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)
我的
注册活动.class
看起来像:

package com.snapwebdevelopment.scanhappy;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserInfo;
import com.google.firebase.auth.UserProfileChangeRequest;

public class SignupActivity extends Activity implements View.OnClickListener {

    //defining view objects
    private EditText editTextEmail;
    private EditText editTextPassword;
    private Button buttonSignup;
    private ProgressDialog progressDialog;


    //defining firebaseauth object
    private FirebaseAuth firebaseAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);

        //initializing firebase auth object
        firebaseAuth = FirebaseAuth.getInstance();

        //initializing views
        editTextEmail = (EditText) findViewById(R.id.editTextEmail);
        editTextPassword = (EditText) findViewById(R.id.editTextPassword);

        buttonSignup = (Button) findViewById(R.id.buttonSignup);

        progressDialog = new ProgressDialog(this);

        //attaching listener to button
        buttonSignup.setOnClickListener(this);
    }

    private void registerUser(){

        //getting email and password from edit texts
        String email = editTextEmail.getText().toString().trim();
        String password  = editTextPassword.getText().toString().trim();

        //checking if email and passwords are empty
        if(TextUtils.isEmpty(email)){
            Toast.makeText(this,"Please enter email",Toast.LENGTH_LONG).show();
            return;
        }

        if(TextUtils.isEmpty(password)){
            Toast.makeText(this,"Please enter password",Toast.LENGTH_LONG).show();
            return;
        }

        //if the email and password are not empty
        //displaying a progress dialog

        progressDialog.setMessage("Registering Please Wait...");
        progressDialog.show();

        //creating a new user
        firebaseAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        //checking if success
                        if(task.isSuccessful()){

                            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                            UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                    .setDisplayName("Jane Q. User")
                                    .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
                                    .build();

                            user.updateProfile(profileUpdates)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {
                                            Log.d("add name", "User profile updated.");
                                        }
                                    }
                                });


                            Log.d("displayname", user.getDisplayName());
                            Toast.makeText(SignupActivity.this,"Successfully registered",Toast.LENGTH_LONG).show();
                            startActivity(new Intent(SignupActivity.this, MainActivity.class));
                        }else{
                            //display some message here
                            Toast.makeText(SignupActivity.this,"Registration Error",Toast.LENGTH_LONG).show();
                        }
                        progressDialog.dismiss();
                    }
                });

    }

    @Override
    public void onClick(View view) {
        //calling register method on click
        registerUser();
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.snapwebdevelopment.scanhappy.SignupActivity">

    <LinearLayout
        android:layout_centerVertical="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:ignore="UselessParent">

        <EditText
            android:id="@+id/editTextEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:hint="@string/enter_email"
            android:inputType="textEmailAddress" />

        <EditText
            android:id="@+id/editTextPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:hint="Enter password (6+ characters)"
            android:inputType="textPassword"
            tools:ignore="HardcodedText" />

        <Button
            android:id="@+id/buttonSignup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:text="Signup"
            tools:ignore="HardcodedText" />

    </LinearLayout>

</RelativeLayout>

我在做什么导致这个错误?要成功地将新帐户的用户名注册为“Jane Q.user”,我可以在代码中更改哪些内容?

您的错误位于第105行Log.d(“displayname”,user.getDisplayName())


user.getDisplayName()我认为您正在正确地更新名称,但是您在第105行的日志被调用得太快了。这就是为什么您的错误消息是
NullPointerException
。调用显示名称时,显示名称尚未设置。尝试将第105行中的登录移动到第97行中的
OnCompleteListener
中。这与此问题无关,但为什么不使用FirebaseUI为您处理整个用户登录/注册流程@HarshitDwivedi我肯定注意到了这个选项,但我希望能够添加比可用字段更多的字段,并进一步定制外观和感觉。