0

基本的に私は Google マップに取り組んでおり、Google マップのアクティビティがあり、ユーザーが Google マップの任意の場所をクリックします。このクリックにマーカーを追加していました。このボタンのクリックに 1 つのボタンがあります。このマーカーの位置を取り、Firebase に配置します。 Database.My 完全なコードは機能していましたが、問題は、マーカー 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