2017-10-04 87 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(類 exceptionType)'來記錄失敗結果,以便追蹤問題。你基本上吞下了你展示Toast的else塊中的異常(如果有的話)。 – Jimmy

回答

1

首先,你應該改變敬酒,在你的失敗狀況,

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

所以,你得到了什麼錯的任務。

不過在這之前你能夠在控制檯電子郵件/密碼 ????

1

見註冊從以下網址新用戶:https://firebase.google.com/docs/auth/android/start/?authuser=0

如果task.isSuccessful()是false.You可以添加此得到錯誤

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

更新你的代碼爲:

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)); 

          } 
         } 
        }); 
       } 



      } 
     }); 

您應該在logcat中看到警告:

Logcat Android

+0

你好,我和這個問過的人有同樣的錯誤。我看不到任何日誌。它也會拋出失敗的消息。這意味着它沒有通過。我實際上使用了他的一些代碼。也許這是實現呢? – Rekt

+0

@Rekt你應該看到類似這樣的警告https://i.stack.imgur.com/lK1F5.png logcat –

+0

@Rekt你在應用程序中看到了用戶帳戶創建失敗麪包,是嗎? –