完成()不会破坏活动

问题描述 投票:0回答:2

我对firebase 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但数据不受干扰继续代码完全用完全封闭的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>

有没有什么办法解决这一问题。完成()

android firebase android-activity firebase-realtime-database
2个回答
0
投票

即使在finish()之后,您的活动仍将保留在内存中,因为需要显式删除Firebase事件侦听器。

你正在补充

table_user.addValueEventListener(<your_listener>);

finish()之前,你应该

table_user.removeEventListener(<your_listener>);

清除对活动的引用。您可能必须创建一个私有EventListener(不确定确切的类名)对象,以便以后在删除时可以引用它。


0
投票

如果你想回到MainActivity,那么你需要这样做而不是finish():

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

因为你无法直接完成android中的活动,所以你必须先告诉它,然后才能从那里开始。

© www.soinside.com 2019 - 2024. All rights reserved.