0

Ich verwende Android PlacePicker, um den Breiten- und Längengrad eines Standorts in meiner Firebase-Datenbank unter Verwendung der place.getLatLng();-Methode zu speichern.wird gespeichert LatLng, um den Standort auf der Karte anzuzeigen, wenn geklickt wird

Ich speicherte auch den Namen des Standortes mit der place.getName(); Methode.

Der Name des Ortes ist im Post des Benutzers sichtbar, aber der Breiten- und Längengrad sind nicht sichtbar. Wenn ein Benutzer auf den Namen des Ortes im Ansichtshalter klickt, werden sie zu einer Aktivität geleitet, bei der PlacePicker diesen Ort in der Karte anzeigt.

hier ist ein Beispiel für die Feuerbasis JSON

{ 
    "dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d", 
    "image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b", 
    "latLong" : "lat/lng: (-6.190593300000001,106.8061219)", 
    "summary" : "yo", 
    "place" : "the biggest mall in Asia", 
    "uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2", 
    "username" : "Rambo" 
} 

Ich weiß, wie die Breite und Länge als Extra auf eine andere Tätigkeit wie

postRef = FirebaseDatabase.getInstance().getReference().child("posts"); 
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         postRef.child(post_key).addValueEventListener(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           final String latLng = dataSnapshot.child("latLong").getValue().toString(); 
           Intent mapIntent = new Intent(MainActivity.this, MapActivity.class); 

           mapIntent.putExtra("LatLng",latLng); 
           startActivity(mapIntent); 

          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 

        } 
       }); 

senden gespeichert, aber wie verwende ich automatisch, dass Lat und Long-Wert, damit der PlacePicker diesen Ort automatisch in MapActivity anzeigt?

Danke!

+0

Vor diesem Code Lesen Sie in einer Produktions-App unbedingt die [Places-API-Richtlinien] (https://developers.google.com/places/web-service/policies#pre-fetching_caching_or_storage_of_content) sorgfältig durch. Nach meinem Verständnis können Sie die Daten nicht länger als 30 Tage speichern. –

Antwort

1

Zunächst ändert sich Ihr Schema wie diese

{ 
    "dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d", 
    "image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b", 
    "lat": "-6.190593300000001", 
    "lng": "106.8061219", 
    "summary" : "yo", 
    "place" : "the biggest mall in Asia", 
    "uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2", 
    "username" : "Rambo" 
} 

Behandle sie als zwei separate Werte oder wenn Sie wollen, wie man behandelt werden Sie es wie dieser

{ 
    "dPicture" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Profile_images%2Fcropped175425077.jpg?alt=media&token=d40abdda-d4e7-450b-b215-a8bb0ee1ce4d", 
    "image" : "https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/Post_Images%2Fcropped945668710.jpg?alt=media&token=2db5ee7c-9c98-4512-98ea-7ec984e5306b", 
    "coords": { 
     "lat": "-6.190593300000001", 
     "lng": "106.8061219", 
    } 
    "summary" : "yo", 
    "place" : "the biggest mall in Asia", 
    "uid" : "bFVSFnu6uJcfOEmCGeYpmmRsjQA2", 
    "username" : "Rambo" 
} 

sie abzufragen bekommen könnte :

Für die erste Version des Schemas:

postRef = FirebaseDatabase.getInstance().getReference().child("posts"); 
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     postRef.child(post_key).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       final String lat = dataSnapshot.child("lat").getValue().toString(); 
       final String lng = dataSnapshot.child("lng").getValue().toString(); 
       Intent mapIntent = new Intent(MainActivity.this, MapActivity.class); 
       mapIntent.putExtra("lat",lat); 
       mapIntent.putExtra("lng",lng); 
       startActivity(mapIntent); 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 
}); 

Für die zweite Version des Schemas:

postRef = FirebaseDatabase.getInstance().getReference().child("posts"); 
viewHolder.mPlaceName.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     postRef.child(post_key).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       final String lat = dataSnapshot.child("coords").child("lat").getValue().toString(); 
       final String lng = dataSnapshot.child("coords").child("lng").getValue().toString(); 
       Intent mapIntent = new Intent(MainActivity.this, MapActivity.class); 
       mapIntent.putExtra("lat",lat); 
       mapIntent.putExtra("lng",lng); 
       startActivity(mapIntent); 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

    } 
}); 

Sie könnten implementieren, was für Sie funktionieren würde, aber ich schlage vor, die zweite eine für organisatorische Vorlieben.

Um sie in der nächsten Aktivität zu zeigen, vorausgesetzt, Sie Ihren Google Maps-Setup in der App haben, verwenden Sie diesen Code:

@Override 
public void onMapReady(GoogleMap map) { 
    map.addMarker(new MarkerOptions() 
     //get this LatLng values from the Intent 
     .position(new LatLng(<yourLat>, <yourLng>)) 
     .title("Hello world")); 
} 

Versuchen Sie, auf diese zu lesen, wie gut: https://developers.google.com/maps/documentation/android-api/marker

+0

hi Kurt ... Danke für die Antwort, aber das ist, um die Informationen zur nächsten Aktivität zu bekommen ... meine Frage war, wie man diese Information benutzt, um den Drop-Pin auf der Karte an diesem Ort zu zeigen. aber 1 upvote für die tolle Empfehlung! Wie separiere ich die Lat- und Long-Einträge? nur scheint 'getLatLng();' Methode zu finden – Jagmaster

+0

Ich habe die Frage falsch interpretiert. Es tut uns leid. –

+0

Um sie festzulegen, können Sie getLatLng(). Latitude und getLatLng(). Longitude verwenden. Sehen Sie dies für weitere Informationen: https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng –

Verwandte Themen