При загрузке новой категории для продуктов питания После регистрации нового пользователя происходит внезапная загрузка и удаление операции в базе данных реального времени 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+" %");
}
});
}
}
}