0

基本上我正在研究谷歌地图,其中我有谷歌地图活动,用户点击谷歌地图的任何地方我在这个点击上添加了标记,我在这个按钮上有一个按钮点击我把这个标记位置放到我的 Firebase数据库。我的完整代码正在运行,但问题是当我单击将标记 latlang 带到 Firebase 的按钮时,我的 latlang 值成功更新并且我的地图活动被重新转换(例如/例如,从当前活动到自我的意图活动),我的地图被重新加载,我在屏幕上丢失了标记。

这是我的Java代码:

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.pm.PackageManager;
import android.location.Location;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.firebase.client.Firebase;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class PickUpActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, View.OnClickListener, GoogleMap.OnMapClickListener {
    private static final int PERMISSION_REQUEST_CODE = 1;
    public double marker_latitude;
    public double marker_longitude;
    private GoogleMap mMap;
    private GoogleApiClient googleApiClient;
    private Marker marker;
    private double latitude;
    private double longitude;
    private Button btn;
    private Bus bus;
    private Firebase ref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pick_up);
        Firebase.setAndroidContext(this);
        btn = (Button) findViewById(R.id.btn_pick);
        ref = new Firebase(Config.FIREBASE_URL);
        bus = new Bus();
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        mMap = mapFragment.getMap();
        googleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addApi(LocationServices.API)
                .build();

        btn.setOnClickListener(this);
        mMap.setOnMapClickListener(this);
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        getCurrentLocation();

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    protected void onStart() {
        googleApiClient.connect();
        super.onStart();
    }

    @Override
    protected void onStop() {
        googleApiClient.disconnect();
        super.onStop();
    }

    private void getCurrentLocation() {
        if (!checkPermission()) {
            requestPermission();
        }

        Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (location != null) {

            longitude = location.getLongitude();
            latitude = location.getLatitude();

            moveMap();
        }
    }

    private void moveMap() {
        LatLng latLng = new LatLng(latitude, longitude);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
    }

    private boolean checkPermission() {
        int result = ContextCompat.checkSelfPermission(PickUpActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

    private void requestPermission() {

        if (ActivityCompat.shouldShowRequestPermissionRationale(PickUpActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
            Toast.makeText(PickUpActivity.this, "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        } else {
            ActivityCompat.requestPermissions(PickUpActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    getCurrentLocation();
                } else {

                }
                break;
        }
    }

    @Override
    public void onClick(View v) {
        if (v == btn) {
            if (marker == null) {
                Toast.makeText(PickUpActivity.this, "Please Select Any Place", Toast.LENGTH_SHORT).show();
            } else {
                bus.setlatitude(marker_latitude);
                bus.setlongitude(marker_longitude);
                ref.child("school1").child("bus1").child("parents").child("parent01").child("pickuppoint").setValue(bus);
                Toast.makeText(PickUpActivity.this, "Pick Up Point Set", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onMapClick(LatLng latLng) {
        mMap.clear();
        marker = mMap.addMarker(new MarkerOptions()
                .position(latLng) //setting position
                .draggable(true) //Making the marker draggable
                .title("" + latLng));
        marker_latitude = latLng.latitude;
        marker_longitude = latLng.longitude;
    }
}

在分析过程中,我在以下代码中发现了问题:

bus.setlatitude(marker_latitude);
bus.setlongitude(marker_longitude);
   ref.child("school1").child("bus1").child("parents").child("parent01").child("pickuppoint").setValue(bus);

如果我设置一些静态值bus.setlatitude()并且bus.setlongitude不会发生重新转换。我不知道我做错了什么以及这个问题的解决方案是什么。

4

1 回答 1

0

如果您的用户点击您的地图,地图将被清除:mMap.clear();

@Override
public void onMapClick(LatLng latLng) {

    mMap.addMarker(new MarkerOptions()
            .position(latLng) //setting position
            .draggable(true) //Making the marker draggable
            .title(""+latLng));
    marker_latitude = latLng.latitude;
    marker_longitude= latLng.longitude;

}
于 2016-09-21T14:35:55.250 回答