2016-06-12 10 views
7

Firebase를 사용 중이며 로그인/로그인 활동이 정상적으로 작동하지만 각 사용자가 사용자 이름을 업데이트해야합니다. 나는 응용 프로그램 에뮬레이터에서 "불행하게도, 응용 프로그램이 중지되었습니다"의 오류가 발생하고Android Firebase - getUid()를 사용하여 사용자 ID를 가져올 수 없습니다. - 오류 : null 객체 참조시

firebaseRef.getAuth().getUid() 

: 내가 실행할 수 없습니다입니다 보인다.

모니터에서 안드로이드 스튜디오에 발생하는 주요 오류와 같습니다. getUid()와 관련이 있습니다.

java.lang.NullPointerException 오 : 널 객체 참조 여기

에 ') java.lang.String의 com.firebase.client.AuthData.getUid ('가상 메소드를 호출 시도 내 활성 코드 :

package me.netsync.netconnect; 

import android.app.ActionBar; 
import android.content.Intent; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import com.firebase.client.AuthData; 
import com.firebase.client.Firebase; 

public class SettingActivity extends AppCompatActivity { 

    private Firebase mRef; 
    private Button BtnSettings; 
    private EditText TxtUsername; 

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

     mRef = new Firebase(Constants.FIREBASE_URL); 

     BtnSettings = (Button)findViewById(R.id.BtnSettings); 
     BtnSettings.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // username txt update the profile 
       TxtUsername = (EditText)findViewById(R.id.TxtUsername); 
       String TxtUsernameStr = TxtUsername.getText().toString(); 
       TxtUsernameStr = TxtUsernameStr.trim(); 

       // check we can get a userid 
       /* if(mRef.getAuth() == null){ 
        Intent intent = new Intent(SettingActivity.this,LoginActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
       }*/ 

       if(TxtUsernameStr.isEmpty()){ 
        // show a dialog box 
        AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this); 
        builder.setMessage("Please make sure you enter a Username" + TxtUsernameStr) 
          .setTitle("Error!") 
          .setPositiveButton(android.R.string.ok, null); 
        AlertDialog dialog = builder.create(); 
        dialog.show(); 
       }else{ 
        Firebase upDateUserProfile = new Firebase(Constants.FIREBASE_URL); 
        String uid = upDateUserProfile.getAuth().getUid(); 
        User user = new User(TxtUsernameStr); 
        upDateUserProfile.child("users").child(uid).child("username").setValue(user); 
       } 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     int btn = item.getItemId(); 

     if(btn == R.id.action_logout){ 
      mRef.unauth(); 
      Intent intent = new Intent(this,LoginActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      startActivity(intent); 
     } 

     if(btn == R.id.action_settings){ 
      mRef.unauth(); 
      Intent intent = new Intent(this,SettingActivity.class); 
      startActivity(intent); 
     } 

     return true; 
    } 
} 

감사합니다. 앱 build.gradle에서

+0

확인을 위해 Firebase의 간단한 이메일/비밀번호 로그인을 사용하고 있습니다. – user3200080

+0

[null 참조가 무엇입니까] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – noev

+0

즉, AuthData null입니다 의미합니다 당신은 정말로 사용자가 기록 되었습니까? getAuth가 null인지 확인하십시오. [이 링크보기] (https://www.firebase.com/docs/android/guide/user-auth.html) 새로운 Firebase SDK를 사용하는 것이 좋습니다. – Borja

답변

4

, 의존성

컴파일이 추가가 'com.google.firebase : 중포 기지-인증 : 9.4.0'

import com.google.firebase.auth.FirebaseAuth; 
... 
... 

if (FirebaseAuth.getInstance().getCurrentUser() == null) { 
    //Go to login 
} 
else{ 
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
} 
+0

나는 if 그렇지 않으면 항상 null입니다 ... http://stackoverflow.com/questions/40309345/firebase-uid-always-null – Lion789

1

이 AuthStateListener을 추가해야합니다.

 mAuth=FirebaseAuth.getInstance(); 
     mAuthListener=new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 


      if(firebaseAuth.getCurrentUser()==null){ 

       //Your action here 

      } 

     } 
    };