微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在从 ProductDetailsActivity 转移到 HomeActivity 时,LoginActivity 会出现一个 toast?

如何解决为什么在从 ProductDetailsActivity 转移到 HomeActivity 时,LoginActivity 会出现一个 toast?

请帮我解决这个问题。我已经为此工作了好几天。

ProductsDetailActivity

            package com.example.spree;
        
        import androidx.annotation.NonNull;
        import androidx.appcompat.app.AppCompatActivity;
        
        import android.content.Intent;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Button;
        import android.widget.ImageView;
        import android.widget.TextView;
        import android.widget.Toast;
        
        import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton;
        import com.example.spree.Models.Products;
        import com.example.spree.Models.Users;
        import com.example.spree.Prevalent.Prevalent;
        import com.google.android.gms.tasks.OnCompleteListener;
        import com.google.android.gms.tasks.Task;
        import com.google.android.material.floatingactionbutton.FloatingActionButton;
        import com.google.firebase.database.DataSnapshot;
        import com.google.firebase.database.DatabaseError;
        import com.google.firebase.database.DatabaseReference;
        import com.google.firebase.database.FirebaseDatabase;
        import com.google.firebase.database.ValueEventListener;
        import com.squareup.picasso.Picasso;
        
        import java.text.SimpleDateFormat;
        import java.util.Calendar;
        import java.util.HashMap;
        
        import io.paperdb.Paper;
        
        public class ProductsDetailActivity extends AppCompatActivity {
        
            private Button addToCart;
            private ImageView productDetailImage;
            private ElegantNumberButton numberButton;
            private TextView productNameDetail,productDescriptionDetail,productPriceDetail;
            private String productID = "";
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_products_detail);
        
        
        
                productID = getIntent().getStringExtra("pid");
        
        
                productDetailImage = findViewById(R.id.product_image_details);
                productNameDetail = findViewById(R.id.product_name_details);
                productDescriptionDetail = findViewById(R.id.product_description_details);
                productPriceDetail = findViewById(R.id.product_price_details);
                numberButton = findViewById(R.id.elegant_button);
                addToCart = findViewById(R.id.product_cart);
        
        
        
        
        
                
                getProductDetails(productID);
        
                addToCart.setonClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
        
                        addToCartList();
                    }
                });
            }
        
            private void addToCartList() {
        
        
                String saveCurrentTime,saveCurrentDate;
        
                Calendar callForDate = Calendar.getInstance();
        
                SimpleDateFormat currentDate = new SimpleDateFormat("MMM-dd-yyyy");
                saveCurrentDate = currentDate.format(callForDate.getTime());
        
                SimpleDateFormat currentTime = new SimpleDateFormat(" HH:mm:s a");
                saveCurrentTime = currentTime.format(callForDate.getTime());
        
        
               final DatabaseReference cartListRef = FirebaseDatabase.getInstance()
                       .getReference().child("Cart List");
        
                final HashMap<String,Object> cartMap = new HashMap<>();
                cartMap.put("pid",productID);
                cartMap.put("pname",productNameDetail.getText().toString());
                cartMap.put("price",productPriceDetail.getText().toString());
                cartMap.put("date",saveCurrentDate);
                cartMap.put("time",saveCurrentTime);
                cartMap.put("quantity",numberButton.getNumber());
                cartMap.put("discount","");
        
        
                cartListRef.child("User View").child(Prevalent.currentOnlineUser.getPhone())
                        .child("Products")
                        .child(productID)
                        .updateChildren(cartMap)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
        
                                if(task.isSuccessful()){
        
                                    cartListRef.child("Admin View").child(Prevalent.currentOnlineUser.getPhone())
                                            .child("Products")
                                            .child(productID)
                                            .updateChildren(cartMap)
                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    
                                                    if (task.isSuccessful()){
                                                        Toast.makeText(ProductsDetailActivity.this,"Added to cart successfully.",Toast.LENGTH_SHORT).show();
        
        
                                                        Intent pIntent = new Intent(ProductsDetailActivity.this,HomeActivity.class);
        
                                                        startActivity(pIntent);
        
                                                    }
                                                    
                                                }
                                            });
        
                                }
                            }
                        });
        
            }
        
            private void getProductDetails(String productID) {
                DatabaseReference productReference = FirebaseDatabase.getInstance().getReference().child("Products");
        
        
                productReference.child(productID).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
        
                        if (snapshot.exists()){
                            Products products = snapshot.getValue(Products.class);
        
                            productNameDetail.setText(products.getPname());
                            productPriceDetail.setText(products.getPrice());
                            productDescriptionDetail.setText(products.getDescription());
        
                            Picasso.get().load(products.getimage()).into(productDetailImage);
        
                        }
                    }
        
                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
        
                    }
                });
            }
        
        
        }

家庭活动

    package com.example.spree;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.spree.Models.Products;
import com.example.spree.Prevalent.Prevalent;
import com.example.spree.ViewHolder.ProductViewHolder;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.core.view.GravityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;

import de.hdodenhof.circleimageview.CircleImageView;
import io.paperdb.Paper;

public class HomeActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener
{

    //private AppBarConfiguration mAppBarConfiguration;

    private DatabaseReference productsRef;
    private RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;

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

        Paper.init(this);

        productsRef = FirebaseDatabase.getInstance().getReference().child("Products");

        Toolbar toolbar = findViewById(R.id.toolbar);
        toolbar.setTitle("Home");
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);

        fab.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view,"Replace with your own action",Snackbar.LENGTH_LONG)
                        .setAction("Action",null).show();
            }
        });


        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();


        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);


        View headerView = navigationView.getHeaderView(0);
        TextView userNameTextView = headerView.findViewById(R.id.user_profile_name);
        CircleImageView profileImageView = headerView.findViewById(R.id.profile_image);

        userNameTextView.setText(Prevalent.currentOnlineUser.getName());

        Picasso.get().load(Prevalent.currentOnlineUser.getimage()).placeholder(R.drawable.profile).into(profileImageView);


        recyclerView = findViewById(R.id.recycler_menu);
        recyclerView.setHasFixedSize(true);
        layoutManager = new linearlayoutmanager(this);
        recyclerView.setLayoutManager(layoutManager);

        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
//        mAppBarConfiguration = new AppBarConfiguration.Builder(
//                R.id.nav_home,R.id.nav_gallery,R.id.nav_slideshow)
//                .setDrawerLayout(drawer)
//                .build();
//        NavController navController = Navigation.findNavController(this,R.id.nav_host_fragment);
//        NavigationUI.setupActionBarWithNavController(this,navController,mAppBarConfiguration);
//        NavigationUI.setupWithNavController(navigationView,navController);
    }

    @Override
    protected void onStart() {
        super.onStart();

        FirebaseRecyclerOptions<Products> options = new FirebaseRecyclerOptions.Builder<Products>()
                .setQuery(productsRef,Products.class)
                .build();


        FirebaseRecyclerAdapter<Products,ProductViewHolder> productAdapter =
                new FirebaseRecyclerAdapter<Products,ProductViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull ProductViewHolder holder,int position,@NonNull final Products model) {

                        holder.textProductName.setText(model.getPname());
                        holder.textProductDescription.setText(model.getDescription());
                        holder.textProductPrice.setText("Price TK: " +model.getPrice()+"/-");
                        Picasso.get().load(model.getimage()).into(holder.imageView);


                        holder.itemView.setonClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Intent intent = new Intent(HomeActivity.this,ProductsDetailActivity.class);
                                intent.putExtra("pid",model.getPid());
                                startActivity(intent);

                            }
                        });

                    }

                    @NonNull
                    @Override
                    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
                        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_items_layout,parent,false);
                        ProductViewHolder holder = new ProductViewHolder(view);
                        return holder;
                    }
                };

        recyclerView.setAdapter(productAdapter);
        productAdapter.startListening();
    }

    @Override
    public void onBackpressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackpressed();
        }
    }

    @Override
    public boolean onoptionsItemSelected(MenuItem item)
    {
        int id = item.getItemId();

//        if (id == R.id.nav_settings)
//        {
//            return true;
//        }

        return super.onoptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.home,menu);
        return true;
    }





    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item)
    {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_cart)
        {

        }
        else if (id == R.id.nav_orders)
        {

        }
        else if (id == R.id.nav_category)
        {

        }
        else if (id == R.id.nav_settings)
        {
            Intent intent = new Intent(HomeActivity.this,SettingsActivity.class);
            startActivity(intent);
        }
        else if (id == R.id.nav_logout)
        {
            Paper.book().destroy();

            Intent intent = new Intent(HomeActivity.this,MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finish();
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

LoginActivity(从 ProductsDetailActivity 移动到 HomeActivity 时根本没有使用)

        package com.example.spree;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;

    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.text.TextUtils;

    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

    import android.widget.TextView;
    import android.widget.Toast;

    import com.example.spree.Models.Users;
    import com.example.spree.Prevalent.Prevalent;
    import com.google.firebase.database.DataSnapshot;
    import com.google.firebase.database.DatabaseError;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    import com.google.firebase.database.ValueEventListener;

    import com.rey.material.widget.CheckBox;


    import io.paperdb.Paper;

    public class LoginActivity extends AppCompatActivity {

        private EditText inputPhoneNumber,inputPassword;
        private Button loginButton;
        private ProgressDialog loadingDialog;
        private String parentdbname = "Users";

        private TextView adminLink,notAdminLink;

        private CheckBox checkBoxRememberMe;

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

            inputPhoneNumber = findViewById(R.id.login_phone_number_input);
            inputPassword = findViewById(R.id.login_password_input);

            loginButton = findViewById(R.id.login_btn);
            loadingDialog = new ProgressDialog(this);

            checkBoxRememberMe = (CheckBox) findViewById(R.id.remember_me_chkb);
            Paper.init(this);

            adminLink = findViewById(R.id.admin_panel_link);
            notAdminLink = findViewById(R.id.not_admin_panel_link);

            //onClickListeners

            loginButton.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    loginUser();
                }
            });


            adminLink.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    loginButton.setText("Login Admin");
                    adminLink.setVisibility(View.INVISIBLE);
                    notAdminLink.setVisibility(View.VISIBLE);
                    parentdbname = "Admins";
                }
            });


            notAdminLink.setonClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    loginButton.setText("Login");
                    notAdminLink.setVisibility(View.INVISIBLE);
                    adminLink.setVisibility(View.VISIBLE);
                    parentdbname = "Users";
                }
            });

        }

        private void loginUser() {

            String phone = inputPhoneNumber.getText().toString();
            String password = inputPassword.getText().toString();

             if (TextUtils.isEmpty(phone)) {
                Toast.makeText(this,"Please,enter your mobile number.",Toast.LENGTH_SHORT).show();
            } else if (TextUtils.isEmpty(password)) {
                Toast.makeText(this,enter your password.",Toast.LENGTH_SHORT).show();
            } else {

                 loadingDialog.setTitle("Login Account");
                 loadingDialog.setMessage("Please,wait while we are checking the credentials.");
                 loadingDialog.setCanceledOnTouchOutside(false);
                 loadingDialog.show();

                 allowAccesstoUser(phone,password);

             }

        }

        private void allowAccesstoUser(final String phone,final String password) {



            if(checkBoxRememberMe.isChecked()){
                Paper.book().write(Prevalent.userPhoneKey,phone);
                Paper.book().write(Prevalent.userPassKey,password);

            }

            final DatabaseReference myRef;
            myRef = FirebaseDatabase.getInstance().getReference();


            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if(snapshot.child(parentdbname).child(phone).exists()){
                        Users userData = snapshot.child(parentdbname).child(phone).getValue(Users.class);

                        if(userData.getPhone().equals(phone)){
                            if(userData.getpassword().equals(password)){

                               if(parentdbname.equals("Admins")){
                                   Toast.makeText(LoginActivity.this,"Admin logged in successfully!",Toast.LENGTH_SHORT).show();
                                   loadingDialog.dismiss();

                                   Intent intent = new Intent(LoginActivity.this,AdminCategoryActivity.class);
                                   startActivity(intent);
                               }

                               else if (parentdbname.equals("Users")) {
                                   Toast.makeText(LoginActivity.this,"User logged in successfully!",HomeActivity.class);
                                  Prevalent.currentOnlineUser = userData;
                                   startActivity(intent);
                               }
                            }

                            else
                            {
                                Toast.makeText(LoginActivity.this,"Incorrect password",Toast.LENGTH_SHORT).show();
                                loadingDialog.dismiss();
                            }
                        }
                    }
                    else
                    {
                        Toast.makeText(LoginActivity.this,"Account with this "+phone+ " doesn't exist",Toast.LENGTH_SHORT).show();
                        loadingDialog.dismiss();
                    }

                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
        }
    }

所以基本上,当单击添加到购物车按钮时,它会将我带到 HomeActivty,但在显示“已成功添加到购物车”的吐司消息之前,它会显示用户已成功登录”吐司两次。我的应用程序是否在返回 HomeActivity 时检查用户是否已登录(再次)?请帮忙

解决方法

如果有人看到我的问题一直想知道为什么?我找到了一个解决方案(耶!)。在我的 LoginActivity 中,我写了:

    myRef.addValueEventListener(new ValueEventListener() {...

但我应该写:

    myRef.addListenerForSingleValueEvent(new ValueEventListener() {...

因为 addValueEventListener() 一直在监听它所附加的查询或数据库引用。但是 addListenerForSingleValueEvent() 立即执行 onDataChange 方法,在执行该方法一次后,它停止侦听它所附加的参考位置。至此,问题解决。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?