0

Fondamentalement, je travaille sur Google Map dans lequel j'ai Google Map Activity et l'utilisateur clique sur n'importe quel endroit de Google Map que j'ajoutais marqueur sur ce clic et j'ai un bouton sur ce bouton cliquez sur je prends cette position de marqueur et le mettre à ma base de données Firebase.My code complet fonctionnait, mais le problème est que lorsque je clique sur le bouton qui prend marqueur latlang à Firebase, ma valeur latlang mise à jour avec succès et ma carte Activité est re-transite (par ex. comme Intention de l'activité actuelle à l'activité personnelle) que pour ma carte a été rechargée et je perds le marqueur à l'écran.Re-Transition quand je clique sur le bouton (par exemple/Comme Intention de l'activité actuelle à l'activité personnelle)

Voici mon code 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; 
    } 
} 

Au cours de l'analyse que je trouve problème dans le code ci-dessous:

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

Si je mets une valeur statique sur bus.setlatitude() et bus.setlongitude sans re-transition se produit. Je ne sais pas ce que je fais de mal et quelle est la solution à ce problème.

Répondre

0

si l'utilisateur clique sur votre carte la carte seront effacées: 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; 

} 
+0

OK j'ôterai mMap.clear(); mais le problème reste encore. ne pas résoudre après avoir enlevé – Basit

+0

je ne suis pas sûr que je comprends votre problème correctement, mais vous ne définissez pas un nouveau marqueur. votre «ancien» marqueur sera déplacé vers le nouvel endroit. vous devez définir un nouveau marqueur à chaque fois. J'ai mis à jour ma réponse maintenant il faut ajouter un nouveau marqueur sur la carte à chaque clic. – padeg

+0

Ya je veux déplacer un marqueur dans tous les endroits de clic de l'utilisateur. fondamentalement je prenais un endroit pour l'utilisateur qui était son point de ramassage. et laissez-moi plus clair sur mon problème est par exemple prendre un nom d'activité est MainActivity mettre un bouton sur cette activité .sur ce bouton cliquez sur pass intention comme ceci "startactivity (nouvelle intention (MainActivity.This, MainActivity.class)); " et montrer ce qui se passe sur ce bouton cliquer aczetly arriver comme ça sans écrire un tel type de code et plus de chose que j'ai été noté quand je passais paramètre statique comme mentionné ci-dessus tout va bien être. – Basit