Как разрешить пользователям добавлять пользовательские маркеры на пустую карту с помощью Google Maps API и Fire base

#android #firebase #google-maps #firebase-realtime-database

#Android #firebase #google-карты #firebase-realtime-database

Вопрос:

Я разрабатываю приложение на Android Studio, которое позволяет пользователям рекомендовать рестораны и достопримечательности, которые им нравятся. Они отправили бы его через страницу отправки в моей точке доступа. Я бы хотел, чтобы он сохранял их отправку в fire-base, а затем заполнял пустую карту маркером клиента и деталями.

Я нашел руководство по добавлению пользовательских маркеров на карту с использованием местоположения пользователей, использующего firebase, но все это делается в коде, и я не уверен, будет ли адаптация этого кода к моим потребностям лучше, чем использование другого метода.

Ниже приведен код, используемый в руководстве.

 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

 View view = inflater.inflate(R.layout.fragment_user_list, container, false);
    mUserListRecyclerView = view.findViewById(R.id.user_list_recycler_view);
    mMapView = view.findViewById(R.id.user_list_map);

    initUserListRecyclerView();
    initGoogleMap(savedInstanceState);

    setUserPosition();

    return view;
}


private void addMapMarkers(){

    if(mGoogleMap != null){

        if(mClusterManager == null){
            mClusterManager = new ClusterManager<ClusterMarker>(getActivity().getApplicationContext(), mGoogleMap);
        }
        if(mClusterManagerRenderer == null){
            mClusterManagerRenderer = new MyClusterMarkerManagerRenderer(
                    getActivity(),
                    mGoogleMap,
                    mClusterManager
            );
            mClusterManager.setRenderer(mClusterManagerRenderer);
        }

        for(UserLocation userLocation: mUserLocations){

            Log.d(TAG, "addMapMarkers: location: "   userLocation.getGeo_point().toString());
            try{
                String snippet = "";
                if(userLocation.getUser().getUser_id().equals(FirebaseAuth.getInstance().getUid())){
                    snippet = "This is you";
                }
                else{
                    snippet = "Determine route to "   userLocation.getUser().getUsername()   "?";
                }

                int avatar = R.drawable.cartman_cop; // set the default avatar
                try{
                    avatar = Integer.parseInt(userLocation.getUser().getAvatar());
                }catch (NumberFormatException e){
                    Log.d(TAG, "addMapMarkers: no avatar for "   userLocation.getUser().getUsername()   ", setting default.");
                }
                ClusterMarker newClusterMarker = new ClusterMarker(
                        new LatLng(userLocation.getGeo_point().getLatitude(), userLocation.getGeo_point().getLongitude()),
                        userLocation.getUser().getUsername(),
                        snippet,
                        avatar,
                        userLocation.getUser()
                );
                mClusterManager.addItem(newClusterMarker);
                mClusterMarkers.add(newClusterMarker);

            }catch (NullPointerException e){
                Log.e(TAG, "addMapMarkers: NullPointerException: "   e.getMessage() );
            }

        }
        mClusterManager.cluster();

        setCameraView();
    }
}
private void setCameraView() {

    // Set a boundary to start
    double bottomBoundary = mUserPosition.getGeo_point().getLatitude() - .1;
    double leftBoundary = mUserPosition.getGeo_point().getLongitude() - .1;
    double topBoundary = mUserPosition.getGeo_point().getLatitude()   .1;
    double rightBoundary = mUserPosition.getGeo_point().getLongitude()   .1;

    mMapBoundary = new LatLngBounds(
            new LatLng(bottomBoundary, leftBoundary),
            new LatLng(topBoundary, rightBoundary)
    );

    mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(mMapBoundary, 0));}

private void setUserPosition() {

    for (UserLocation userLocation : mUserLocations) {
        if (userLocation.getUser().getUser_id().equals(FirebaseAuth.getInstance().getUid())) {
            mUserPosition = userLocation;
        }
  

Комментарии:

1. И что не так с этим кодом?

2. Этот код определяет местоположение пользователя и размещает пользовательский маркер на карте. Я хочу код, который позволяет клиенту вводить свои собственные данные, назначать эту информацию firebase, а затем заполнять карту