Firestore обновляется только при доступе через определенное действие Android.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Firestore обновляется только при доступе через определенное действие Android.

Сообщение Anonymous »

Я работаю над приложением для Android, в котором пользователи могут добавлять и удалять рестораны из избранного с помощью действия RestaurantPage. Когда я получаю доступ к действию RestaurantPage из действия UserFavourites и пытаюсь удалить ресторан из моего избранного, Firestore успешно обновляется, удаляя ресторан из моего избранного в базе данных. Однако когда я захожу в ресторан через действие «Поиск», я не могу удалить его из избранного (Firestore не обновляется при нажатии кнопки «Избранное»). Вот код моей активности RestaurantPage, активности UserFavourites, активности поиска и класса AppManager. Я новичок в разработке Android, поэтому буду очень признателен за любую помощь!
Страница ресторана:


import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

import java.util.ArrayList;

public class RestaurantPage extends AppCompatActivity {

Button favourited;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.menu_restaurantpage);
favourited = findViewById(R.id.favouriteButton);

Restaurant currRestaurant = AppManager.getCurrentRestaurant();

ArrayList currFavourites = AppManager.getCurrentUser().getFavourites();
Log.d("CURR USER", AppManager.getCurrentUser().getUsername());

int i = 0;
boolean flag = false;
while (i < currFavourites.size() && !flag){
if (currFavourites.get(i).getName().equals(currRestaurant.getName())){
flag = true;
}
i++;
}

if (flag) {
favourited.setText("Remove from favourites");
}
else {
favourited.setText("Add to favourites");
}

favourited.setOnClickListener((view) -> {
ArrayList currentFavourites = AppManager.getCurrentUser().getFavourites();
int j = 0;
boolean flag2 = false;
while (j < currentFavourites.size() && !flag2) {
if (currentFavourites.get(j).getName().equals(currRestaurant.getName())) {
flag2 = true;
}
j++;
}

if (flag2) {
AppManager.getCurrentUser().removeFavourite(currRestaurant);
favourited.setText("Add to favourites");
}
else {
AppManager.getCurrentUser().addFavourite(currRestaurant);
favourited.setText("Remove from favourites");
}
AppManager.uploadUser(AppManager.getCurrentUser());
});

}

}

Избранное пользователя:


public class UserFavourites extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

private FirebaseAuth authenticate;
private ArrayList userList;

private User currentUser;

private SearchView favouritesBar;

private RecyclerView favouritesRecyclerView;

private SearchAdapter searchAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.menu_favourites);
authenticate = FirebaseAuth.getInstance();

favouritesRecyclerView = findViewById(R.id.favourites_list);

favouritesRecyclerView.setItemAnimator(new DefaultItemAnimator());
favouritesRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
currentUser = AppManager.getCurrentUser();
if (currentUser == null){
Log.d( "USER FAIL", "No user found");
startActivity(new Intent(UserFavourites.this, HomeScreen.class));
return;
}
else {
Log.d("USER FOUND", "User found");
}

searchAdapter = new SearchAdapter(currentUser.getFavourites(), UserFavourites.this, new SearchAdapter.ItemClickListener() {
@Override
public void onItemClick(Restaurant restaurant) {
Log.d("NEWPAGE", "User sent to restaurant page for " + restaurant.getName());
AppManager.setCurrentRestaurant(restaurant);
startActivity(new Intent(UserFavourites.this, RestaurantPage.class));
}
});

}

}

Поиск:
public class Search extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

protected ArrayList searchList;
protected RecyclerView searchRecyclerView;
SearchAdapter searchAdapter;

private DrawerLayout nav_layout;
private Toolbar nav_toolbar;

private NavigationView nav_view;

private ArrayList userList;

private User currentUser;

private FirebaseAuth authenticate;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.menu_searchpage);
nav_layout = findViewById(R.id.nav_layout);
nav_toolbar = findViewById(R.id.nav_toolbar);
nav_view = findViewById(R.id.navigationView);
nav_view.setItemIconTintList(null);

searchRecyclerView = findViewById(R.id.search_list);
searchRecyclerView.setItemAnimator(new DefaultItemAnimator());
searchRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
searchList = AppManager.getRestaurants();
authenticate = FirebaseAuth.getInstance();
currentUser = AppManager.getCurrentUser();
if (currentUser == null){
Log.d( "USER FAIL", "No user found");
startActivity(new Intent(Search.this, HomeScreen.class));
return;
}
else {
Log.d("USER FOUND", "User found");

}

searchAdapter = new SearchAdapter(searchList, Search.this, new SearchAdapter.ItemClickListener() {
@Override
public void onItemClick(Restaurant restaurant) {
Log.d("NEWPAGE", "User sent to restaurant page for " + restaurant.getName());
AppManager.setCurrentRestaurant(restaurant);
startActivity(new Intent(Search.this, RestaurantPage.class));

}
});

}

}

Менеджер приложений:


public class AppManager {

private static int numOfRestaurants;
private static FirebaseFirestore db = FirebaseFirestore.getInstance();
private static ArrayList users = new ArrayList();
protected static ArrayList restaurants = new ArrayList();

private static Restaurant currentRestaurant;
private static User currentUser;

public static ArrayList getUsersImmediately(){
return users;
}
public static ArrayList getUsers(){
users.clear();
db.collection("users").get()
.addOnCompleteListener((task) -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
users.add(document.toObject(User.class));
Log.d("USER ADD", "Added user to user list");

}
Log.d("DOWNLOAD DB", "Successfully obtained users");

}
})
.addOnFailureListener((task) -> {
Log.d("DOWNLOAD DB", "Failed to obtain users");
});

return users;
}

public static void downloadRestaurants(){

restaurants.clear();
db.collection("restaurants").get()
.addOnCompleteListener((task) -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
restaurants.add(document.toObject(Restaurant.class));
Log.d("RESTAURANT ADD", "Added restaurant to restaurant list");

}
Log.d("DOWNLOAD DB", "Successfully downloaded restaurants");

}
})
.addOnFailureListener((task) -> {
Log.d("DOWNLOAD DB", "Failed to download restaurants");
});

}

public static void downloadUsers(){

users.clear();
db.collection("users").get()
.addOnCompleteListener((task) -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
users.add(document.toObject(User.class));
Log.d("USER ADD", "Added user to user list");

}
Log.d("DOWNLOAD DB", "Successfully downloaded users");

}
})
.addOnFailureListener((task) -> {
Log.d("DOWNLOAD DB", "Failed to download users");
});

}

public static void uploadUser(User user){
db.collection("users").document(user.getUsername())
.set(user)
.addOnSuccessListener((task) -> {
Log.d("UPLOAD DB", "User " + user.getUsername() + " uploaded to database");
})
.addOnFailureListener((task) ->{
Log.d("UPLOAD DB", "User could not be uploaded");

});
}

public static void uploadRestaurant(Restaurant restaurant){
db.collection("restaurants").document(restaurant.getName())
.set(restaurant)
.addOnSuccessListener((task) -> {
Log.d("UPLOAD DB", "Restaurant " + restaurant.getName() + " uploaded to database");
})
.addOnFailureListener((task) ->{
Log.d("UPLOAD DB", "Restaurant could not be uploaded");

});
}

public static ArrayList getRestaurants(){
restaurants.clear();
db.collection("restaurants").get()
.addOnCompleteListener((task) -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
restaurants.add(document.toObject(Restaurant.class));
Log.d("RESTAURANT ADD", "Added restaurant to restaurant list");

}
Log.d("DOWNLOAD DB", "Successfully obtained restaurants");

}
})
.addOnFailureListener((task) -> {
Log.d("DOWNLOAD DB", "Failed to obtain restaurants");
});

return restaurants;
}

public static Restaurant getRestaurant(int i){
return restaurants.get(i);
}

public static Restaurant getCurrentRestaurant() {
return currentRestaurant;
}

public static void setCurrentRestaurant(Restaurant newCurrent) {
currentRestaurant = newCurrent;
}

public static User getCurrentUser() {
return currentUser;
}

public static void setCurrentUser(User currentUser) {
AppManager.currentUser = currentUser;
}

}



Подробнее здесь: https://stackoverflow.com/questions/798 ... d-activity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»