2016-11-08 6 views
0

Firebase Auth (새 사용자 등록)를 사용 중이며 주 스레드에서 완벽하게 작동하지만 배경으로 옮길 때 인증이 항상 실패했습니다. 여기 는 새로운 사용자를 생성하는 방법입니다 :비동기 작업에서 Firebase Auth가 작동하지 않습니다.

public void createAccount(String email, String password) { 
    mAuth.createUserWithEmailAndPassword(email, password) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); 
        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 

        if (!task.isSuccessful()) { 
         Toast.makeText(registerActivity.this, "bad", 
           Toast.LENGTH_SHORT).show(); 
         sr = false; 

        } else { 

         FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
         if (user != null) { 

          EditText etname = (EditText) findViewById(R.id.etName); 
          EditText etlname = (EditText) findViewById(R.id.etLName); 
          String namez = etname.getText().toString(); 
          String lnamez = etlname.getText().toString(); 
          DatabaseReference mDatabase; 
          mDatabase = FirebaseDatabase.getInstance().getReference(); 
          Toast.makeText(registerActivity.this, "good", Toast.LENGTH_SHORT).show(); 
          String UID = user.getUid(); 
          mDatabase.child("users").child(UID + "_lname").setValue(lnamez); 
          mDatabase.child("users").child(UID + "_name").setValue(namez); 
          sr = true; 
         } 
        } 

        // ... 
       } 
      }); 
} 

여기에 AsyncTask를은 다음과 같습니다

private class createInBack extends AsyncTask<Void, Void, Void> { 
//Executes the 'createAccount' method in background . 
EditText etemail = (EditText) findViewById(R.id.etEmail); 
    EditText etpassword = (EditText) findViewById(R.id.etPassword); 
    String email = etemail.getText().toString(); 
    String password = etpassword.getText().toString(); 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     spinner.setVisibility(View.VISIBLE); 

    } 
    @Override 
    protected Void doInBackground(Void... voids) { 

     createAccount(email, password); 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     if(sr){ 
      Toast.makeText(registerActivity.this, "we good here", Toast.LENGTH_SHORT).show(); 
      startActivity(new Intent(registerActivity.this, MainActivity.class)); 
     } 
     spinner.setVisibility(View.GONE); 
    } 
} 

그래서 문제가 무엇인가?

+0

FirebaseAuth가 당신을 위해 처리하므로 비동기 작업을 만들어야한다고 생각하지 않습니다. – Linxy

+0

그것이 내가 처음 한 일이지만 Logcat에서 다음과 같은 내용의 로그를 찾았습니다 : 주 스레드에서 너무 많은 작업. –

+0

흠 .. 왜 그런지 모르겠다. 하지만 onPostExecute()가 createAccount()에서 onComplete() 후에 정말로 호출되는지 확신합니까? 왜냐하면 당신은 새로운 활동을 즉시 시작하고 여전히 진행중인 작업을 취소하기 때문에 나는 생각하지 않습니다. 그리고 그것은 당신을 위해 일을 망칠 수도 있습니다. – Linxy

답변

0

문제가 해결 된 XML 레이아웃에서 버튼에서 "android : onClick"을 삭제하는 것을 잊어 버렸습니다.

관련 문제