В PHP существует очень простой метод: один метод:
(count (array_count_values ($ array)) == 1)
Например:
$arr1 = ['a', 'a', 'a', 'a'];
$arr2 = ['a', 'a', 'b', 'a'];
print (count(array_count_values($arr1)) == 1 ? "identical" : "not identical"); // identical
print (count(array_count_values($arr2)) == 1 ? "identical" : "not identical"); // not identical
Вот и все.
Вы не можете вернуть то, что еще не загружено. Firestore загружает данные asynchronously
, так как для этого может потребоваться некоторое время. В зависимости от скорости соединения и состояния, может потребоваться от нескольких сотен миллисекунд до нескольких секунд, прежде чем эти данные будут доступны. Если вы хотите передать объект settings
другому методу, просто вызовите этот метод внутри метода onSuccess()
и передайте этот объект в качестве аргумента. Таким образом, быстрое исправление будет следующим:
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
UserAccountSettings settings = documentSnapshot.toObject(UserAccountSettings.class);
yourMethod(settings);
}
Еще одно замечание: вам не нужно устанавливать эти значения для объекта, который уже имеет их. Вы уже получаете данные из базы данных в качестве объекта.
blockquote>Так что помните, что метод
onSuccess()
имеет асинхронное поведение, а это означает, что вызывается еще до того, как вы получите данные из своего база данных. Если вы хотите использовать объектsettings
вне этого метода, вам нужно создать свой собственныйcallback
. Для этого сначала нужно создать такой интерфейс:public interface MyCallback { void onCallback(UserAccountSettings settings); }
Затем вам нужно создать метод, который фактически получает данные из базы данных. Этот метод должен выглядеть так:
public void readData(MyCallback myCallback) { DocumentReference mSettings = mFirebaseFirestore.collection("user_account_settings").document(userID); mSettings.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { @Override public void onSuccess(DocumentSnapshot documentSnapshot) { UserAccountSettings settings = documentSnapshot.toObject(UserAccountSettings.class); myCallback.onCallback(settings); } }); }
. В конце просто просто вызовите метод
readData()
и передайте экземпляр интерфейсаMyCallback
в качестве аргумента везде, где вам это нужно:readData(new MyCallback() { @Override public void onCallback(UserAccountSettings settings) { Log.d("TAG", settings.getDisplay_name()); } });
Это единственный способ, которым вы можете использовать этот объект класса
UserAccountSettings
вне методаonSuccess()
. Для получения дополнительной информации вы также можете посмотреть видео .