Я использую базу данных Firebase для хранения данных о количестве пользователей. Таким образом,
Теперь, когда я получаю их в своем окне, я вычисляю расстояние от моего текущего местоположения до этого местоположения пользователя, используя следующий код,
private void loadLocationForThisUser(Double lat, Double lng, Double lat1,
Double lng1) {
//Create location from user coordinates
currentUser1 = new Location("");
currentUser1.setLatitude(lat);
currentUser1.setLongitude(lng);
//Create location from friend coordinates
friend1 = new Location("");
friend1.setLatitude(lat1);
friend1.setLongitude(lng1);
distance = (new DecimalFormat("#.#").format((currentUser1.distanceTo(friend1)) / 1000)+ "km");
}
и вызовите этот метод следующим образом в моем адаптере просмотра firebase,
FirebaseRecyclerOptions<Contacts> options = new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(UsersRef, Contacts.class)
.build();
adapter = new FirebaseRecyclerAdapter<Contacts, FindFriendViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final FindFriendViewHolder holder, int position, @NonNull final Contacts model) {
lat = mLastLocation.getLatitude();
lng = mLastLocation.getLongitude();
lat1 = Double.parseDouble(model.getMylat());
lng1 = Double.parseDouble(model.getMylng());
loadLocationForThisUser(lat, lng, lat1, lng1);
holder.txt_distance.setText(distance);
}
@NonNull
@Override
public FindFriendViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout_small, viewGroup, false);
FindFriendViewHolder viewHolder = new FindFriendViewHolder(view);
return viewHolder;
}
};
adapter.startListening();
FindFriendsRecyclerList.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
Это заполняет мой обзор повторного просмотра пользователями и их расстоянием, т. Е. Насколько они далеко от меня. Но список составляется в том порядке, в котором он хранится в базе данных firebase, в результате список пользователей не сортируется по их расстоянию. Если пользователь A дальше от меня, чем пользователь B, но в базе данных он хранится выше пользователя B, то в выходных данных тоже пользователь A выше пользователя B. Ожидаемый вывод состоит в том, что пользователь B должен находиться выше пользователя A в представлении переработчика как его расстояние меньше, чем у пользователя A. Поэтому, соответственно, для всех пользователей следует проверять, кто ближе ко мне, и размещать их над теми, кто находится дальше, чем я, в основном сортировать их по расстоянию от меня.