2017-11-10 6 views
0

firebase finish()의 새로운 기능은 내 가입 활동을 죽이지 않지만 계속 백그라운드에서 진행됩니다. 데이터를 지속적으로 데이터베이스에 저장합니다. 나는 무엇을 해야할지 잘 모릅니다.finish()가 활동을 파괴하지 않습니다.

Signup.java의 코드

final Button signup = (Button) findViewById(R.id.signup); 
    final EditText name, phno, password; 
    name = (EditText) findViewById(R.id.sign_up_name); 
    phno = (EditText) findViewById(R.id.sign_up_phno); 
    password = (EditText)findViewById(R.id.sign_up_pass); 
    final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    final DatabaseReference table_user = database.getReference("User"); 
    signup.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final ProgressDialog mdialog= new ProgressDialog(Signup.this); 
      mdialog.setMessage("Please wait"); 
      mdialog.show(); 
      table_user.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) 
       { 
         if(dataSnapshot.child(phno.getText().toString()).exists()) 
         { 
          mdialog.dismiss(); 
          Toast.makeText(Signup.this,"Phone No. Already Registered",Toast.LENGTH_SHORT).show(); 
         } 
         else 
         { 
          mdialog.dismiss(); 
          User user = new User(name.getText().toString(), password.getText().toString()); 
          table_user.child(phno.getText().toString()).setValue(user); 
          Toast.makeText(Signup.this, "Sign Up Successful", Toast.LENGTH_SHORT).show(); 
          finish(); 

는 // mainActivity.java로 리디렉션하지만 데이터 insersion 코드가 완전히 완벽하게 폐쇄 paranthesis

User.java

public class User { 
private String Name; 
private String Password; 

public User(String y,String x) { 
    Name=y; 
    Password=x; 
} 

public String getName() { 
    return Name; 
} 

public void setName(String name) { 
    Name = name; 
} 

public String getPassword() { 
    return Password; 
} 

public void setPassword(String password) { 
    Password = password; 
} 
} 

activity_signup로 기록 계속 .xml

,210

이 문제를 해결할 수있는 방법이있다. 직접 안드로이드에서 작업을 완료 당신은 캔트 때문에 당신이 그것을 파괴하기 전에 말할 필요

Intent intent = new Intent(this, MainActivity.class); 
startActivity(intent); 
finish(); 

: 마무리()

+0

코드에서 성공적으로 가입하면 주 활동으로 연결되지 않습니다. –

+0

활동을 마치기 전에 firebase에서 removeListener를 제거해야합니다. – ADM

+0

코드를 삽입했는지, 아니면 삽입하지 않은 상태로 디버깅을 했습니까? –

답변

0

Firebase 이벤트 리스너를 명시 적으로 제거해야하므로 finish() 후에도 활동이 메모리에 남아 있습니다.

당신은 finish() 전에

table_user.addValueEventListener(<your_listener>); 

를 추가

, 당신은

table_user.removeEventListener(<your_listener>); 

활동에 대한 참조를 취소해야한다. 전용 EventListener (정확한 클래스 이름이 확실하지 않은) 객체를 만들어야 나중에 제거 할 때 참조 할 수 있습니다.

+0

table_user.removeEventListener (this);를 사용했습니다. 안드로이드 입문 ... "이"키워드 덕분에 크리슈나에게 감사했습니다. –

0

다시 MainActivity에 가고 싶은 경우에 당신은() 마무리 대신에이 작업을 수행 할 필요가 그곳에서 머리로.

+0

친구 내 대답을 업데이트했습니다. 지금 확인하십시오. 이것은 효과가있다. 그리고이 게시물을 대답으로 표시하는 것을 잊지 마십시오. –