Загрузка новой категории в базу данных Firebase в реальном времени, выполняющая внезапное удаление после автоматической загрузки нового пользователя - PullRequest
0 голосов
/ 05 мая 2019

При загрузке новой категории для продуктов питания После регистрации нового пользователя происходит внезапная загрузка и удаление операции в базе данных реального времени Firebase автоматически. Почему он удаляется автоматически? Категории добавлены успешно, но при повторном открытии приложения и входа в систему.

// Код для регистрации пользователя

public class SignUp extends AppCompatActivity {

MaterialEditText edtPhone, edtName, edtPassword,edtRestaurantName;
Button btnSignUp,btnSelect;


FirebaseStorage storage;
StorageReference storageReference;

Uri saveUri;

String ImageUrl ;

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

    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();

    edtName = findViewById(R.id.edtName);
    edtPassword = findViewById(R.id.edtPassword);
    edtPhone =  findViewById(R.id.edtPhone);
    edtRestaurantName = findViewById(R.id.edtRestaurantName);
    btnSignUp = findViewById(R.id.btnSignUp);
    btnSelect = findViewById(R.id.btnSelect);
    // Init Firebase
    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference table_user = database.getReference("user");




    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {




            if (Common.isConnectedToInternet(getBaseContext())) {
                final ProgressDialog mDialog = new ProgressDialog(SignUp.this);
                mDialog.setMessage("\n" +
                        "Please wait...");
                mDialog.show();

                table_user.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        // Cek apakah Nomot telepon telah terdaftar
                        if (dataSnapshot.child(edtPhone.getText().toString()).exists()) {
                            mDialog.dismiss();
                            Toast.makeText(SignUp.this, "Phone Number Registered !!", Toast.LENGTH_SHORT);
                        } else {

                            mDialog.dismiss();
                            User user = new User(edtName.getText().toString(), edtPassword.getText().toString(),edtPhone.getText().toString());
                            table_user.child(edtPhone.getText().toString()).setValue(user);

                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                }

                );



             database.getReference("Restaurants").addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        User user = new User(edtName.getText().toString(),edtPhone.getText().toString(),edtRestaurantName.getText().toString(),"https://firebasestorage.googleapis.com/v0/b/fastfooddelivery-fc7f3.appspot.com/o/images%2FRestaurant.jpeg?alt=media&token=2d5c5a2c-6fab-4fda-aa9e-0d4927758b6f");
                        database.getReference("Restaurants").child(edtPhone.getText().toString()).setValue(user);
                        Toast.makeText(SignUp.this, "Signup Successful !!", Toast.LENGTH_SHORT);
                        Intent intent = new Intent(SignUp.this,MainActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(intent);
                    }

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

                    }
                });
            }else {
                Toast.makeText(SignUp.this, "Please check your internet connection!", Toast.LENGTH_SHORT).show();
            }
        }
    });

    btnSelect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

}
}

// Код для входа в систему пользователя

public class SignIn extends AppCompatActivity {

EditText edtPhone, edtPassword;
Button btnSignIn;

FirebaseDatabase db;
DatabaseReference users;

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

    edtPassword = findViewById(R.id.edtPassword);
    edtPhone = findViewById(R.id.edtPhone);
    btnSignIn = findViewById(R.id.btnSignIn);

    // Init Firebase
    db = FirebaseDatabase.getInstance();
    users = db.getReference("user");

    btnSignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signInUser(edtPhone.getText().toString(), edtPassword.getText().toString());
        }
    });
}

private void signInUser(String phone, String password) {
    final ProgressDialog mDialog = new ProgressDialog(SignIn.this);
    mDialog.setMessage("Please wait...");
    mDialog.show();

    final String localPhone = phone;
    final String localPassword = password;
    users.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.child(localPhone).exists())
            {
                mDialog.dismiss();
                User user = dataSnapshot.child(localPhone).getValue(User.class);
                user.setPhone(localPhone);
                if (Boolean.parseBoolean(user.getIsStaff())) // If isStaff == true
                {
                    if (user.getPassword().equals(localPassword))
                    {
                        //Login Ok
                        Toast.makeText(SignIn.this, "Login Successfully!", Toast.LENGTH_SHORT).show();
                        Intent login = new Intent(SignIn.this, Home.class);
                        login.putExtra("localPhone",localPhone);
                        Common.currentUser = user;
                        startActivity(login);
                        finish();
                    }
                    else {
                        Toast.makeText(SignIn.this, "Password wrong !", Toast.LENGTH_SHORT).show();
                    }
                    return;
                }
                else
                    Toast.makeText(SignIn.this, "\n" +
                            "Please login with a staff account", Toast.LENGTH_SHORT).show();
            }
            else
            {
                mDialog.dismiss();
                Toast.makeText(SignIn.this, "User not registered!", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(SignIn.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}
}

// Код для новой категории продуктов Добавить

public class Home extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

TextView txtFullName;


FirebaseDatabase database;
DatabaseReference category;
FirebaseStorage storage;
StorageReference storageReference;
FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;


RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;


MaterialEditText edtNama;
FButton btnUpload, btnSelect;

Category newCategory;
DrawerLayout drawer;


Uri saveUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle("\n" + "Menu Management");
    setSupportActionBar(toolbar);

    String localPhone ;
    Intent intent = getIntent();

    localPhone = intent.getStringExtra("localPhone");

    //Init Firebase
    database = FirebaseDatabase.getInstance();
    category = database.getReference("Restaurants").child(localPhone).child("detail").child("Category");
    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showDialog();
        }
    });

    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);
    txtFullName = headerView.findViewById(R.id.txtFullName);
    txtFullName.setText(Common.currentUser.getNama());

    //Init View
    recycler_menu = findViewById(R.id.recycle_menu);
    recycler_menu.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recycler_menu.setLayoutManager(layoutManager);

    loadMenu();

//Send Token
    updateToken(FirebaseInstanceId.getInstance().getToken());

}

private void updateToken(String token) {
    FirebaseDatabase db = FirebaseDatabase.getInstance();
    DatabaseReference tokens = db.getReference("Tokens");
    Token data = new Token(token,true); // false because this token send from client app
    tokens.child(Common.currentUser.getPhone()).setValue(data);
}

// Menampilkan Dialog Tambah Kategori
private void showDialog() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(Home.this);
    alertDialog.setTitle("Add New Category");
    alertDialog.setMessage("\n" + "Please fill in all information!");

    LayoutInflater inflater = this.getLayoutInflater();
    View add_menu_layout = inflater.inflate(R.layout.add_new_menu_layout, null);

    edtNama = add_menu_layout.findViewById(R.id.edtNama);
    btnSelect = add_menu_layout.findViewById(R.id.btnSelect);
    btnUpload = add_menu_layout.findViewById(R.id.btnUpload);

    //Event for Button
    btnSelect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            chooseImage();
        }
    });

    btnUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            uploadImage();
        }
    });

    alertDialog.setView(add_menu_layout);
    alertDialog.setIcon(R.drawable.ic_shopping_cart_black_24dp);

    //Set button
    alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            dialog.dismiss();
            //Buat saja category baru
            if (newCategory != null){
                category.push().setValue(newCategory);
                Snackbar.make(drawer, "\n" +
                        "New category "+ newCategory.getNama()+" Added", Snackbar.LENGTH_SHORT)
                        .show();
            }
        }
    });
    alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            dialog.dismiss();
        }
    });
    alertDialog.show();
}

private void uploadImage() {
    if (saveUri != null) {
        final ProgressDialog mDialog = new ProgressDialog(this);
        mDialog.setMessage("Uploading ...");
        mDialog.show();

        String imageName = UUID.randomUUID().toString();
        final StorageReference imageFolder = storageReference.child("images/"+imageName);
        imageFolder.putFile(saveUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        mDialog.dismiss();
                        Toast.makeText(Home.this, "Uploaded !!!", Toast.LENGTH_SHORT).show();
                        imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                // atur nilai untuk newCategory jika gambar upload dan kita ambil download linknya.
                                newCategory = new Category(edtNama.getText().toString(),uri.toString());
                            }
                        });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        mDialog.dismiss();
                        Toast.makeText(Home.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                        mDialog.setMessage("Uploaded "+progress+" %");
                    }
                });
    }
}


// Dispatch incoming result to the correct fragment.
// Kirim hasil yang masuk ke fragmen yang benar
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Common.PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null) {
        saveUri = data.getData();
        btnSelect.setText("Selected Images!");
    }
}

// Memilih gambar dengan ekspilsit inten dari galeri.
// Get URL gambar dari galeri
private void chooseImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,"Select Image"),Common.PICK_IMAGE_REQUEST);
}



private void loadMenu() {
    adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(
            Category.class,
            R.layout.menu_item,
            MenuViewHolder.class,
            category
    ) {
        @Override
        protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) {
            viewHolder.txtMenuName.setText(model.getNama());
            Picasso.with(Home.this).load(model.getImage())
                    .into(viewHolder.imageView);

            viewHolder.setItemClickListener(new ItemClickListener() {
                @Override
                public void onClick(View view, int position, boolean isLongClik) {
                    // kirim Category Id dan mulai aktivity baru.
                    Intent foodList = new Intent(Home.this, FoodList.class);

                    foodList.putExtra("CategoryId",adapter.getRef(position).getKey());
                    startActivity(foodList);
                }
            });
        }



    adapter.notifyDataSetChanged(); // Refresh data if have data change
    recycler_menu.setAdapter(adapter);
}


@Override
protected void onStop() {
    super.onStop();
//        adapter.stopListening();
}

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

    }
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

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

    if (id == R.id.nav_order){
        Intent order = new Intent(Home.this,OrderStatus.class);
        startActivity(order);
    }
    else if (id == R.id.nav_banner){
        Intent banner = new Intent(Home.this,BannerActivity.class);
        startActivity(banner);
    }

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

//Update / Delete


@Override
public boolean onContextItemSelected(MenuItem item) {
    if (item.getTitle().equals(Common.UPDATE)){
        showUpdateDialog(adapter.getRef(item.getOrder()).getKey(), adapter.getItem(item.getOrder()));
    } else if (item.getTitle().equals(Common.DELETE)){
        deleteCategory(adapter.getRef(item.getOrder()).getKey());
    }
    return super.onContextItemSelected(item);
}

private void deleteCategory(String key) {

    //First , we need get all food in category
    DatabaseReference foods = database.getReference("Foods");
    com.google.firebase.database.Query foodInCategory = foods.orderByChild("menuId").equalTo(key);
    foodInCategory.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot postSnapShot:dataSnapshot.getChildren()){
                postSnapShot.getRef().removeValue();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    category.child(key).removeValue();
    Toast.makeText(this, "\n" +
            "Item Delete !!!", Toast.LENGTH_SHORT);
}

private void showUpdateDialog(final String key, final Category item) {
    // Salin saja kodenya dari showDialog() lalu dirubah di beberapa bagian
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(Home.this);
    alertDialog.setTitle("\n" +
            "Update Category");
    alertDialog.setMessage("\n" +
            "Please fill in all information!");

    LayoutInflater inflater = this.getLayoutInflater();
    View add_menu_layout = inflater.inflate(R.layout.add_new_menu_layout, null);

    edtNama = add_menu_layout.findViewById(R.id.edtNama);
    btnSelect = add_menu_layout.findViewById(R.id.btnSelect);
    btnUpload = add_menu_layout.findViewById(R.id.btnUpload);

    // Atur nama default
    edtNama.setText(item.getNama());

    //Event for Button
    btnSelect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            chooseImage();
        }
    });

    btnUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeImage(item);
        }
    });

    alertDialog.setView(add_menu_layout);
    alertDialog.setIcon(R.drawable.ic_shopping_cart_black_24dp);

    //Set button
    alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            dialog.dismiss();
            // Update informasi Kategori
            item.setNama(edtNama.getText().toString());
            category.child(key).setValue(item);
        }
    });
    alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int i) {
            dialog.dismiss();
        }
    });
    alertDialog.show();
}

private void changeImage(final Category item) {
    if (saveUri != null) {
        final ProgressDialog mDialog = new ProgressDialog(this);
        mDialog.setMessage("\n" +
                "Uploading ...");
        mDialog.show();

        String imageName = UUID.randomUUID().toString();
        final StorageReference imageFolder = storageReference.child("images/"+imageName);
        imageFolder.putFile(saveUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        mDialog.dismiss();
                        Toast.makeText(Home.this, "Uploaded !!!", Toast.LENGTH_SHORT).show();
                        imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                // atur nilai untuk newCategory jika gambar upload dan kita ambil download linknya.
                                item.setImage(uri.toString());
                            }
                        });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        mDialog.dismiss();
                        Toast.makeText(Home.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                        mDialog.setMessage("Uploaded "+progress+" %");
                    }
                });
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...