2017-11-01 4 views
-2

Ich entwickle Taxi-App wie Uber, ich habe Android-App, Standortupdate alle 5 Sekunden zu erhalten, derzeit verwende ich Retrofit zu synchronisieren um Standortdaten mit dem Server zu synchronisieren. Aber wir erwarten, dass Tausende von Treibern alle fünf Sekunden Standortdaten senden werden und eine HTTP-Anforderung, bei der die Verbindung geöffnet ist, als das Senden und Schließen von Daten, Probleme verursacht. Ich versuche TCP/IP oder Sockets zu verwenden, um Daten zu senden, ich möchte, dass der Socket offen bleibt und die Positionsdaten aktualisiert werden, und wenn der Socket geschlossen wird, wird automatisch eine Verbindung hergestellt. Ich habe in keinem Forum Hilfe zu diesem Problem gefunden. Brauche Hilfe, wie kann ich das erreichen und ist dieser Ansatz besser oder nicht?Ich möchte Echtzeit-Standortdaten von Android nach jeweils 5 Sekunden auf Server über Steckdose in Android-App

Antwort

0

Anstatt Socket-Aktualisierung können Sie auch für die Firebase gehen. Wenn Sie erhalten die Lage Sie die Änderungen an der Firebase in der folgenden Art und Weise drücken kann

private FirebaseDatabase database = FirebaseDatabase.getInstance(); 
private DatabaseReference myRef = database.getReference(); 

Wenn auf die Datenbank veröffentlichen können, müssen Sie eine Zeile eindeutig identifizieren, genau wie in normalen Datenbank (dh ID, UUID), also musst du einen erzeugen und in dir speichern SharedPreferences zum Beispiel.

public void postToDatabase(UserLocation location) { 
    DatabaseReference usersRef = myRef.child(someUUID); 
    usersRef.setValue(location); 
} 

für Änderungen hören Sie eine ValueEventListener implementieren. Ein Beispiel, aber müssen sich an Ihre Bedürfnisse anpassen

ValueEventListener valueEventListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for(DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       UserLocation location = new UserLocation(); 
       location.setLongitude((String) snapshot.child("longitude").getValue()); 
       location.setLatitude((String) snapshot.child("latitute").getValue()); 
       //Dispatch your changes in application, i.e with and EventBus 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }; 
+0

Vielen Dank Chirag. Firebase ist auch eine Option, aber unser Server-Ende entwickelt auf Node.js und Verwenden von Mongodb. Also in diesem Projekt kann ich Firebase nicht verwenden, brauche ich dauerhafte Socket-Verbindungslösung, um Daten zu synchronisieren. – YasirSE

Verwandte Themen