-1

Im FirebaseとImの最初のアプリケーションを新規作成したばかりです。ユーザー名を使用したFirebaseユーザー登録/認証

私はいくつかの助けをしたい2つの問題があります。

Android StudioアプリケーションをFirebaseプロジェクトにリンクし、新しいユーザーのSigupのコードを作成しました。

SignupActivity.java

package com.company.fbaseapp.activities; 

    import android.content.Intent; 
    import android.support.annotation.NonNull; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.view.WindowManager; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.ProgressBar; 
    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.company.fbaseapp.R; 

    public class SignupActivity extends AppCompatActivity { 

     private static final String TAG = "SignupActivity"; 

     private EditText mUsername; 
     private EditText mEmail; 
     private EditText mPassword; 

     private Button mSignup; 

     private ProgressBar mProgressBar; 

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

      //mUsername = (EditText) findViewById(R.id.input_username); 

      mEmail = (EditText) findViewById(R.id.input_email); 
      mPassword = (EditText) findViewById(R.id.input_password); 
      mSignup = (Button) findViewById(R.id.btn_signup); 

      mSignup.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 

        Log.d(TAG, "onClick: attempting to signup."); 

        // Check for null valued EditText fields 
        if (!isEmpty (mEmail.getText().toString()) && !isEmpty (mPassword.getText().toString())) { 

         signupNewUser(mEmail.getText().toString(), mPassword.getText().toString()); 

         //Toast.makeText(SignupActivity.this, "Thank you for signing up", Toast.LENGTH_SHORT).show(); 
        } 
        else { 
         Toast.makeText(SignupActivity.this, "You must fill out all the fields", Toast.LENGTH_SHORT).show(); 
        } 

       } 

      }); 

      hideSoftKeyboard(); 

     } 

     private void signupNewUser(String email, String password) { 

      showDialog(); 

      FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) 
        .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 

         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 

          Log.d(TAG, "onComplete: onComplete: " + task.isSuccessful()); 

          if (task.isSuccessful()) { 

           Log.d(TAG, "onComplete: AuthState: " + FirebaseAuth.getInstance() 
             .getCurrentUser() 
             .getUid()); 

FirebaseUser currentperson=FirebaseAuth.getInstance().getCurrentUser(); 
          DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users").child(currentperson.getUid()); 
          ref.child("Username").setValue(name); 

           FirebaseAuth.getInstance().signOut(); 

           redirectLoginScreen(); 

          } 
          if (!task.isSuccessful()) { 

           Toast.makeText(SignupActivity.this, "Unable to signup", Toast.LENGTH_SHORT).show(); 

          } 

         } 

        }); 

     } 

     /** 
     * Return true if the @param is null 
     * @param string 
     * @return 
     */ 
     private boolean isEmpty(String string){ 
      return string.equals(""); 
     } 

     /** 
     * Redirects the user to the login screen 
     */ 
     private void redirectLoginScreen(){ 
      Log.d(TAG, "redirectLoginScreen: redirecting to login screen."); 

      Intent intent = new Intent(SignupActivity.this, LoginActivity.class); 
      startActivity(intent); 
      finish(); 
     } 

     private void showDialog(){ 
      mProgressBar.setVisibility(View.VISIBLE); 

     } 

     private void hideDialog(){ 
      if(mProgressBar.getVisibility() == View.VISIBLE){ 
       mProgressBar.setVisibility(View.INVISIBLE); 
      } 
     } 

     private void hideSoftKeyboard(){ 
      this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     } 

    } 

LogCat

12-30 01:19:18.492 31917-31917/com.company.fbaseapp D/SignupActivity: onClick: attempting to signup. 
12-30 01:19:18.493 31917-31917/com.company.fbaseapp D/AndroidRuntime: Shutting down VM 
12-30 01:19:18.497 31917-31917/com.company.fbaseapp E/AndroidRuntime: FATAL EXCEPTION: main 

Process: com.company.fbaseapp, PID: 31917 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference 
at com.company.fbaseapp.activities.SignupActivity.showDialog(SignupActivity.java:126) 
at com.company.fbaseapp.activities.SignupActivity.signupNewUser(SignupActivity.java:72) 
at com.company.fbaseapp.activities.SignupActivity.access$300(SignupActivity.java:21) 
at com.company.fbaseapp.activities.SignupActivity$1.onClick(SignupActivity.java:54) 
at android.view.View.performClick(View.java:6289) 
at android.view.View$PerformClick.run(View.java:24800) 
at android.os.Handler.handleCallback(Handler.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:98) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6809) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
12-30 01:19:18.499 31917-31917/com.company.fbaseapp D/AppTracker: App Event: crash 

最初の問題は、私はmSignupボタンをクリックすると、アプリケーションがクラッシュしていることです。

第2の問題は、一意のユーザー名をどのように各登録ユーザーに追加できるのかを知りたいということです。

これらの2つの問題を解決する方法を理解してください。

enter image description here

おかげ

答えて

1

これは誤りである:各ユーザーの一意のユーザー名について

mProgressBar = (ProgressBar) findViewById(R.id.progressBar); //your id in xml 

`Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference` 

プログレスバーがnullの場合、あなたはこれを追加する必要がありますこれを行うことができます:

あなたがデータベースに保存されている場合
FirebaseUser currentperson=FirebaseAuth.getInstance().getCurrentUser(); 

そして、あなたはこれを行うことができます。

 DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users"); 
    ref.child(currentperson.getUid()); 

は、上記の各ユーザ名にユニークなユーザーIDを追加します。

認証に一意のユーザー名を追加することをお望みなら、それはできません。あなたは、コンソールに行けばあなたは意志、認証にusernameを追加することはできません

:あなたは同じ電子メールを持つ別のユーザーを登録しようとした場合、あなたはerror:authentication failed

編集を取得しますので、しかし、電子メールはデフォルトでありユニークですuseridおよびemailが追加されています。認証はuseridを提供しますが、ユーザ名は、認証に追加することはできません、それだけで、データベースに追加することができ、これを行うことができます。

 DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users").child(currentperson.getUid()); 
    ref.child("Username").setValue(name); 

、あなたのfirebaseデータベースにあなたはこの必要があります:

Users 
     LA0rRvP4TrewYbMSl0bDA3ork8h2 
        Username: hisname_here 
関連する問題