2017-10-04 14 views
2

私はAndroidプロジェクトを作成しています。まず、登録の仕組みを把握しています。ちなみに、私はFirebaseを使っていました。ここに私のコード:データ保存時にログインできませんでした。(サインアップ)

package com.... 

import... 


public class MainActivity extends AppCompatActivity { 

    //VIEW AND WIDGETS 
    Button createUser, moveToLoginBtn; 
    EditText userEmailEdit, userPasswordEdit; 

    //FIREBASE AUTH FIELDS 
    FirebaseAuth nAuth; 
    FirebaseAuth.AuthStateListener nAuthlistener; 

    DatabaseReference mDatabaseRef, mUserCheckData; 


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


     //ASSIGN ID 
     createUser = (Button) findViewById(R.id.createUserBtn); 
     moveToLoginBtn = (Button) findViewById(R.id.moveToLogin); 
     userEmailEdit = (EditText) findViewById(R.id.emailEditTextCreate); 
     userPasswordEdit = (EditText) findViewById(R.id.passEditTextCreate); 

     //ASSIGN INSTANCE 
     mDatabaseRef = FirebaseDatabase.getInstance().getReference(); 
     mUserCheckData = FirebaseDatabase.getInstance().getReference().child("Users"); 
     nAuth = FirebaseAuth.getInstance(); 


     nAuthlistener = new FirebaseAuth.AuthStateListener(){ 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 

       FirebaseUser user = firebaseAuth.getCurrentUser(); 

       if (user != null) { 

        final String emailForVer = user.getEmail(); 
        mUserCheckData.addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

          checkUserValidation(dataSnapshot, emailForVer); 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 

       } else { 


       } 


      } 

     }; 

     //ON CLICK LISTENER 

     createUser.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 

      final String userEmailString, userPassString; 
      userEmailString = userEmailEdit.getText().toString().trim(); 
      userPassString = userPasswordEdit.getText().toString().trim(); 

      if (!TextUtils.isEmpty(userEmailString) && !TextUtils.isEmpty(userPassString)) 
      { 
       nAuth.createUserWithEmailAndPassword(userEmailString,userPassString).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         if (task.isSuccessful()) 
         { 


          DatabaseReference mChildDatabase = mDatabaseRef.child("Users").push(); 
          String key_user = mChildDatabase.getKey(); 
          mChildDatabase.child("isVerified").setValue("unverified"); 
          mChildDatabase.child("userKey").setValue(key_user); 
          mChildDatabase.child("emailUser").setValue(userEmailString); 
          mChildDatabase.child("passWordUser").setValue(userPassString); 
          Toast.makeText(MainActivity.this, "User Account Created!", Toast.LENGTH_LONG).show(); 

          startActivity(new Intent(MainActivity.this, Profile.class)); 
         } 
         else 
         { 
          Toast.makeText(MainActivity.this, "User Account Creation Fail", Toast.LENGTH_LONG).show(); 
          startActivity(new Intent(MainActivity.this, MainActivity.class)); 

         } 
        } 
       }); 
      } 



      } 
     }); 

     //MOVE TO LOGIN 

     moveToLoginBtn.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 

      startActivity(new Intent(MainActivity.this, LoginActivity.class)); 



      } 
     }); 

    } 

    private void checkUserValidation(DataSnapshot dataSnapshot, String emailForVer) { 


     Iterator iterator = dataSnapshot.getChildren().iterator(); 

     while (iterator.hasNext()) 
     { 

      DataSnapshot dataUser = (DataSnapshot) iterator.next(); 



      if(String.valueOf(dataUser.child("emailUser").getValue()).equals(emailForVer) && dataUser.child("emailUser") != null) 
      { 

       if(String.valueOf(dataUser.child("isVerified").getValue()).equals("unverified") && dataUser.child("isVerified") != null) 
       { 

        Intent in = new Intent(MainActivity.this, Profile.class); 
        in.putExtra("USER_KEY" , String.valueOf(dataUser.child("userKey").getValue())); 
        startActivity(in); 
        //in.putExtra("NAME_KEY" , String.valueOf(dataUser.child("nameKey").getValue())); 



       }else 
       { 
        startActivity(new Intent(MainActivity.this, Welcome.class)); 
       } 

      } 

     } 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     nAuth.addAuthStateListener(nAuthlistener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     nAuth.removeAuthStateListener(nAuthlistener); 
    } 
} 

私は正しく私のメソッドを実装していると思う。それが乾杯しかし:

ユーザーアカウントの作成は

が間違って私の checkUseValidation()方法であり、失敗しましたか?どんな種類の助けにも感謝します。

また、私に注意を払ってください。

public void onComplete 

方法、私が設定しているそれが正しいと思います。なぜデータがfirebaseデータベースに保存されていないのかわかりません。または、なぜその仕事は次のように表示されないのですか。

if (task.isSuccessful()) 

ありがとうございました。

+0

タスクがうまくいかない場合は、何らかの問題があるはずです。 'getException()'または 'getResult(Class exceptionType)'を呼び出すと、失敗の結果を記録して問題を追跡できます。あなたは基本的にToastを表示しているelseブロックの例外を飲み込んでいました。 – Jimmy

答えて

1

まず、あなたが仕事で何が間違って取得するように

Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show(); 

に、あなたの失敗した状態で、トーストを変更する必要があります。

しかし、その前に、あなたはコンソールにEメール/パスワードを有効なかった????

1

URLから新規ユーザー登録を参照してください:

createUser.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 

       final String userEmailString, userPassString; 
       userEmailString = userEmailEdit.getText().toString().trim(); 
       userPassString = userPasswordEdit.getText().toString().trim(); 

       if (!TextUtils.isEmpty(userEmailString) && !TextUtils.isEmpty(userPassString)) 
       { 
        nAuth.createUserWithEmailAndPassword(userEmailString,userPassString).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 

          if (task.isSuccessful()) 
          { 


           DatabaseReference mChildDatabase = mDatabaseRef.child("Users").push(); 
           String key_user = mChildDatabase.getKey(); 
           mChildDatabase.child("isVerified").setValue("unverified"); 
           mChildDatabase.child("userKey").setValue(key_user); 
           mChildDatabase.child("emailUser").setValue(userEmailString); 
           mChildDatabase.child("passWordUser").setValue(userPassString); 
           Toast.makeText(MainActivity.this, "User Account Created!", Toast.LENGTH_LONG).show(); 

           startActivity(new Intent(MainActivity.this, Profile.class)); 
          } 
          else 
          { 
           Log.w("TAG", "createUserWithEmail:failure",task.getException()); 
           Toast.makeText(MainActivity.this, "User Account Creation Fail", Toast.LENGTH_LONG).show(); 
           startActivity(new Intent(MainActivity.this, MainActivity.class)); 

          } 
         } 
        }); 
       } 



      } 
     }); 
:task.isSuccessfulは()false.Youとしてエラー

Log.w(TAG, "createUserWithEmail:failure",task.getException()); 

更新あなたのコードを取得するには、これを追加することができている場合https://firebase.google.com/docs/auth/android/start/?authuser=0

logcatで警告が表示されます。

Logcat Android

+0

こんにちは私はこの質問をした人と同じエラーがあります。私はログを見ることができません。失敗したメッセージもスローされます。それは意味を持ちません。私は実際に私のコードのいくつかを使っていました。おそらくそれはおそらく実装ですか? – Rekt

+0

@Rektこの警告のようなものが表示されるはずです。logcatのhttps://i.stack.imgur.com/lK1F5.png –

+0

@Rektあなたのアプリでユーザーアカウントの作成に失敗しました。 –

関連する問題