2016-11-13 4 views
3

코드를 작성하지/등록 클래스입니다 :중포 기지 코드 내 로그인을위한 새로운 사용자에게

package com.example.joshpc.bluetoothattendee; 

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.TextUtils; 
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; 

public class LoginActivity extends AppCompatActivity { 

private EditText etEmail; 
private EditText etPassword; 
private EditText etRegPW; 
private FirebaseAuth firebaseAuth; 
private Button loginBut; 
private Button regBut; 
private ProgressDialog message; 

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

    etEmail = (EditText) findViewById(R.id.etEmail); 
    etPassword = (EditText) findViewById(R.id.etPassword); 
    etRegPW = (EditText) findViewById(R.id.etRegPW); 

    firebaseAuth = FirebaseAuth.getInstance(); 
    loginBut = (Button) findViewById(R.id.bLogin); 
    regBut = (Button) findViewById(R.id.bRegister); 
    message = new ProgressDialog(this); 



    regBut.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      userRegister(); 
     } 
    }); 

    loginBut.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      userLogin(); 
     } 
    }); 

} 

private void userRegister(){ 
    String email = etEmail.getText().toString().trim(); 
    String password = etPassword.getText().toString().trim(); 
    String verify = etRegPW.getText().toString().trim(); 

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

    if(TextUtils.equals(password, verify)){ 
     message.setMessage("Registering User..."); 
     message.show(); 
     firebaseAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         if(task.isSuccessful()){ 
          Toast.makeText(LoginActivity.this, "Successful Registration", Toast.LENGTH_SHORT).show(); 
          message.hide(); 
          sendData(); 
         } 
         if(!task.isSuccessful()){ 
          Toast.makeText(LoginActivity.this, "Failed Registration", Toast.LENGTH_SHORT).show(); 
          message.hide(); 
          return; 
         } 
        } 
       }); 
    } 

    else { 
     Toast.makeText(this, "Passwords do not match", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

} 

나는이 코드 부분을 실행할 때마다, 그것은 "등록 실패"내 토스트 메시지를 보여주는 끝과 난 왜 그런지 모르겠다. 필자는 전자 메일, 암호의 값을 테스트하고 토스트 메시지로 확인하여 올바르게 전달되고 있는지 확인했습니다. firebase가 Android 기반 사용자를 인증하는 코드를 제안했는지 확인했습니다.

내 Gradle을 빌드 파일은 다음과 같습니다 나뿐만 아니라 에뮬레이터에서이 작업을 실행하고

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 25 
buildToolsVersion "25.0.0" 
useLibrary 'org.apache.http.legacy' 

packagingOptions { 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/NOTICE.txt' 
} 

defaultConfig { 
    applicationId "com.example.joshpc.bluetoothattendee" 
    minSdkVersion 19 
    targetSdkVersion 25 
    versionCode 1 
    versionName "1.0" 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    vectorDrawables.useSupportLibrary = true 
} 
buildTypes { 
    release { 
     minifyEnabled true 
     debug{debuggable = true} 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',   { 
    exclude group: 'com.android.support', module: 'support-annotations' 
}) 
compile 'com.android.support:appcompat-v7:25.0.0' 
compile 'com.google.android.gms:play-services-gcm:9.6.1' 
compile 'com.google.firebase:firebase-auth:9.6.1' 
compile 'com.google.firebase:firebase-core:9.6.1' 
compile 'com.google.firebase:firebase-database:9.6.1' 
testCompile 'junit:junit:4.12' 
} 
apply plugin: 'com.google.gms.google-services' 

.

더 나은 문제 해결을 위해 편집해야 할 것이 있으면 알려 주시기 바랍니다.

업데이트 : 내가 등록한 사용자 계정이 내 firebase에 표시되지만 앱이 여전히 오류 메시지를 내 보내고 있습니다.

+0

당신은 중포 기지 콘솔에서 프로젝트를 설정하고/app 디렉토리에 구글 - services.json 파일을 추가 했습니까? – rhari

+0

방금 ​​지령을 업데이트했습니다. 내가 등록한 계정이 실제로 내 firebase 콘솔에 표시되지만 응용 프로그램이 여전히 내 오류 메시지를 표시합니다 – ThePeskyWabbit

+0

등록 버튼을 누르면 Logcat을 확인할 수 있습니까? Firebase는 대개 일종의 오류 메시지를 표시합니다. – rhari

답변

5

, 당신은 중포 기지 인증 당신에게주는 이유를 표시해야합니다

if(!task.isSuccessful()){ 
    FirebaseAuthException e = (FirebaseAuthException)task.getException(); 
    Toast.makeText(LoginActivity.this, "Failed Registration: "+e.getMessage(), Toast.LENGTH_SHORT).show(); 
    message.hide(); 
    return; 
} 
내가보기 엔 이러한 유형의 정보를 표시 할 토스트를 사용하지 않는 것이 좋습니다

, 대신 (또는 추가로)도 기록하면 개발 중에 영구적 인 기록을 남길 수 있습니다.

Log.e("LoginActivity", "Failed Registration", e); 
1

createUserWithEmailAndPassword()signInWithEmailAndPassword()을 혼동하는 것 같습니다. 사용자를 한 번만 생성하면됩니다. 사용자를 생성하기위한 호출은 또한 사용자에게 로그인합니다. 사용자는 로그 아웃 할 때까지 기기에 로그인 한 상태를 유지합니다. 다른 로그인이 필요한 경우 createUserWithEmailAndPassword()이 아니라 signInWithEmailAndPassword()을 사용하십시오. 당신은 사용자가 실패 생성을 이유을 알고 싶다면

+0

나는 또한 로그인 방법을 가지고있다. 그러나 실제로 이것은 처음으로 사용자를 생성한다. – ThePeskyWabbit

+0

그래서 완료 작업이 성공적이지 않을 때'task.getException(). getMessage()'는 무엇인가? –