मैं अपने मानचित्र पर एकाधिक मार्कर सम्मिलित करने में सक्षम हूं। लेकिन जब मैं अपने फ़ायरबेस डेटाबेस में सम्मिलित कर रहा हूं, तो यह केवल आखिरी मार्कर है जो डाला जाता है। मैं सोच रहा हूं कि मुझे किसी प्रकार की सूची या हैशपैप का उपयोग करना है।
पीओजेओ वर्ग:
public class FirebaseMarker {
String address;
String time;
double latitude;
double longitude;
String routeId;
public FirebaseMarker() {
}
public FirebaseMarker(String address, String time, double latitude, double longitude, String routerId) {
this.address = address;
this.time = time;
this.latitude = latitude;
this.longitude = longitude;
this.routeId = routerId;
}
public String getRouterId() {
return routeId;
}
public void setRouterId(String routerId) {
this.routeId = routerId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
मार्कर निर्माण:
List<Marker> markers;
markers = new ArrayList<>();
Marker marker = mMap.addMarker(new MarkerOptions()
.position(latLng)
.title(address)
.snppet(time)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
markers.add(marker);
मैं कैसे सम्मिलित कर रहा हूँ:
//FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude, routeId);
markerId = userRef.push().getKey();
userRef.child(sharedPreferences.getString("school",null)).child("markers").child(markerId).setValue(markers);
पैरामीटर उपयोगकर्ता इनपुट और भू-कोडर दोनों से हैं
3 जवाब
ऐसा लगता है कि आपके पास मार्कर को डेटाबेस में सहेजने का सामान्य आधार है, लेकिन बाद में डेटाबेस में सहेजने में सक्षम होने के लिए आपको पहले प्रत्येक मार्कर को स्मृति में संग्रहीत करना होगा।
इसके लिए, आप बचत को आसान बनाने के लिए HashMap
का उपयोग कर सकते हैं:
HashMap<String, Object> markers = new HashMap<>();
public void createMarker(String routeId, LatLng latLng, String address, String time) {
// Create a unique ID for this marker (but don't actually store it yet)
String markerId = schoolReference.child("markers").push().getKey();
// Add the marker to the HashMap
FirebaseMarker marker = new FirebaseMarker(address, time, latLng.getLatitude(), latLng.getLongitude(), routeId);
markers.put(markerId, marker);
// Add an actual map marker to the map
mMap.addMarker(new MarkerOptions()
.position(latLng)
.title(address)
.snppet(time)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))
);
}
इस उदाहरण में, जब आप मार्कर (createMarker()
विधि में) बनाते हैं, तो आप मानचित्र में वास्तव में मार्कर जोड़ने से पहले 3 अतिरिक्त क्रियाएं करते हैं:
push()
(यह डेटाबेस से संपर्क नहीं करता है) का उपयोग करके इस मार्कर के लिए एक अद्वितीय आईडी जेनरेट करें।- एक
FirebaseMarker
इंस्टेंस बनाएं जिसे बाद में इस्तेमाल किया जा सके - इस अद्वितीय आईडी और
FirebaseMarker
जोड़ी को एकHashMap
में जोड़ें
फिर, जब आप इन्हें डेटाबेस में सहेजना चाहते हैं, तो आप केवल updateChildren()
का उपयोग करके बहु-स्थान अपडेट करना:
public void saveToDatabase() {
// Do your thing to save the route
// Save the markers to the database in one write operation
schoolReference.child("markers").updateChildren(markers);
}
इसे हल करने के लिए, आपके पास प्रत्येक प्रविष्टि के लिए एक विशिष्ट पहचानकर्ता होना चाहिए। चूंकि फायरबेस डेटाबेस एक नोएसक्यूएल डेटाबेस है और कुंजी और मूल्यों के जोड़े के रूप में संरचित है, प्रत्येक नोड एक Map
है, जिसका अर्थ है कि Map
के मामले में, यह पुराने मान को नए के साथ बदल देता है। तो, आपको कोड की इस पंक्ति को बदलने की जरूरत है:
userRef.child(sharedPreferences.getString("school",null)).child("markers").child(markerId).setValue(marker);
साथ
userRef.push().child(sharedPreferences.getString("school",null)).child("markers").child(markerId).setValue(marker);
जैसा कि आप शायद देख रहे हैं, मैंने आपके userRef
के ठीक बाद push()
विधि जोड़ दी है। यदि आपको उस पुश की को किसी अन्य स्थान पर रखना है, तो बस उस विधि को सही स्थिति में ले जाएं।
संपादित करें: अपने Firebase डेटाबेस में एक नोड को अपडेट करने के लिए आपको setValue()
के बजाय updateChildren()
विधि का उपयोग करना होगा:
markerId = userRef.push().getKey();
Map<String, Object> map = new HashMap<>();
map.put(markerId, marker);
userRef.child(sharedPreferences.getString("school",null)).child("markers").updateChildren(map);
FirebaseMarker marker = new FirebaseMarker(address, time, latitude,
longitude, routeId);
DatabaseReference userRef=FirebaseDatabase.getInstance().getReference().child("sharedPreferences.getString("school",null)").child("markers").push().setValue(marker);
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।