【问题标题】:How to retrieve all location Longitude and latitude from Firebase and put marker on google map api for android [duplicate]如何从 Firebase 检索所有位置经度和纬度并将标记放在 google map api for android [重复]
【发布时间】:2020-11-06 09:54:19
【问题描述】:

我知道这个问题被认为是类似的问题,但是,我真的无法解决,我只是想学习 android 的新手。

因此,预期的结果是有一项活动,即谷歌地图,以允许用户自己查看他们的 SavedPlace。所以我的云 Firestore 结构现在看起来像这样:

然后,在我的代码中,到目前为止我所做的是:

    public class FoodShareActivity extends AppCompatActivity {
    @BindView(R.id.toolbar)
    Toolbar mtoolbar;
    SupportMapFragment supportMapFragment;
    FusedLocationProviderClient client;
    private ChildEventListener mChildEventListener;
    private DatabaseReference mDataRef;
    Marker marker;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_share);
        ButterKnife.bind(this);


        setSupportActionBar(mtoolbar);
        getSupportActionBar().setTitle("FoodShare");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_baseline_keyboard_backspace_24);

        supportMapFragment = (SupportMapFragment)  getSupportFragmentManager().findFragmentById(R.id.google_map);
        client = LocationServices.getFusedLocationProviderClient(this);
        if (ActivityCompat.checkSelfPermission(FoodShareActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            getCurrentLocation();

        } else {
            ActivityCompat.requestPermissions(FoodShareActivity.this, new String[]{
                            Manifest.permission.ACCESS_FINE_LOCATION,}, 44
            );
        }

        ChildEventListener mChildEventListener;
//        mDataRef.push().setValue(marker);
    }

    private void getCurrentLocation() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Task<Location> task = client.getLastLocation();
        task.addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if(location != null){
                    supportMapFragment.getMapAsync(new OnMapReadyCallback() {
                        @Override
                        public void onMapReady(GoogleMap googleMap) {
                                    LatLng latLng = new LatLng(location.getLatitude(),
                                            location.getLongitude());
                                    MarkerOptions options = new MarkerOptions().position(latLng).title("Im hrer");
                                    googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                                    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,17.0f));
                                    googleMap.addMarker(options);
                            FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference myRef = database.getReference("SavedPlace");
                        myRef.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                                    placeModel post = postSnapshot.getValue(placeModel.class);
                                    MarkerOptions markerOptions = new MarkerOptions();
                                    double lat = Double.parseDouble(String.valueOf(post.getLat()));
                                    double lng = Double.parseDouble(String.valueOf(post.getLong()));

                                    LatLng latLng = new LatLng(lat, lng);
                                    markerOptions.position(latLng);
                                    markerOptions.title(post.getPlaceName());
                                    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));

                                    googleMap.addMarker(markerOptions);
                                    googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                                    googleMap.animateCamera(CameraUpdateFactory.zoomTo(12));
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError error) { }
                        });


                                }
                            });
                        }
            }
        });
    }

    @Override
    public boolean onSupportNavigateUp() {
        finish();
        return false;
    }
}

对于我的地方模特,

public class placeModel {
    private String placeAddress;
    private String placeDetails;
    private String placeLatLong;
    private String placeName;
    private String placeNote;
    double Lat;
    double Long;

    public placeModel(){
        //empty constuctor needed
    }

    public placeModel(String placeAddress, String placeDetails, String placeLatLong, String placeName, String placeNote, double Lat, double Long) {
        this.placeAddress = placeAddress;
        this.placeDetails = placeDetails;
        this.placeLatLong = placeLatLong;

        this.placeName = placeName;
        this.placeNote = placeNote;
        this.Lat = Lat;
        this.Long = Long;

    }


    public String getPlaceAddress() {
        return placeAddress;
    }
    public String getPlaceName() { return placeName; }
    public double getLat() {
        Log.d("ga", "checkAA"+ Lat);

        return Lat;
    }
    public double getLong() { return Long; }


    public String getDetails() {
        return placeDetails;
    }
    public String getLatLong() { return placeLatLong; }
    public String getNote() { return placeNote; }

}

地图活动运行良好,并且能够看到我当前的位置。但是数据库中的位置标记不显示。

最终的结果是根据firebase的经纬度在谷歌地图上标记多个标记。

请帮帮我,我在这里呆了大约 2 天。

【问题讨论】:

  • However, the latitude and longitude from firebase does not work 你能解释一下吗?它在做什么?它在做什么?
  • 很抱歉,所以,我的意思实际上是它不显示任何标记,除了当前位置。我实际上想要的是在firebase中拥有所有位置
  • 如果您不将数据库中的名称更改为以小写字母开头,以及在您的班级中,您将无法使用latlong。您还可以使用注释,如 duplicate 中所述。
  • 我改了,还是一样,只是那边什么都没发生。我也试过用Log.d调试,在这个页面运行不了Log。

标签: java android firebase google-maps


【解决方案1】:

我在android中做过同样的事情所以自定义我的代码,它可能会对你有所帮助。

FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("Dams");
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    Dam post = postSnapshot.getValue(Dam.class);
                    damsList.add(post);
                    
                    MarkerOptions markerOptions = new MarkerOptions();
                    double lat = Double.parseDouble(String.valueOf(post.getDamLat()));
                    double lng = Double.parseDouble(String.valueOf(post.getDamLong()));

                    LatLng latLng = new LatLng(lat, lng);
                    markerOptions.position(latLng);
                    markerOptions.title(post.getDamLevel());
                    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));

                    mMap.addMarker(markerOptions);
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                    mMap.animateCamera(CameraUpdateFactory.zoomTo(12));
                }

                pd.dismiss();
            }

            @Override
            public void onCancelled(DatabaseError error) {
                pd.dismiss();

            }
        });

【讨论】:

  • 您好,非常感谢。我可以知道什么是 damsList.add(post);实际上的意思。无论如何,谢谢你。
  • 您可以删除它。这是我从火力基地检索到的帖子列表
  • 好吧,我自定义你的版本后,标记仍然没有出来。我已经更新了问题上方的最新代码。你能帮我检查一下吗,拜托。很抱歉浪费了您的时间。
  • 检查数据是否来自火力基地
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
相关资源
最近更新 更多