2017-11-10 16 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

<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
 
    <EditText 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:hint="Name" 
 
     android:id="@+id/sign_up_name"/> 
 
    <EditText 
 
     android:id="@+id/sign_up_phno" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:layout_below="@id/sign_up_name" 
 
     android:hint="Phone No."/> 
 
    <EditText 
 
     android:id="@+id/sign_up_pass" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:layout_below="@id/sign_up_phno" 
 
     android:hint="password"/> 
 
    <Button 
 
     android:layout_below="@id/sign_up_pass" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/signup" 
 
     android:text="Sign up"/> 
 

 
</RelativeLayout>

これを解決する方法はありますか。直接アンドロイドでの活動を終了あなたはカントので、あなたがそれを破壊する前にそれを伝える必要があり

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

バディ私の答えが更新されましたので、今すぐチェックしてください。これは動作します。そして、あなたのためにこれがうまくいくなら、この投稿を回答としてマークするのを忘れないでください:) –

関連する問題