2014-01-26 28 views
7

Ich verwende Parse.com als mein Back-End und während scheint es eine Methode, saveInBackgroundWithBlock, doppelte Einträge zu verhindern. Es scheint nicht auf Android zu existieren. Ich möchte nur eindeutige Einträge hochladen, kann aber keinen Weg finden, dies zu tun.Verhindern doppelte Einträge parse.com

Das einzige, was ich denken kann, ist zu fragen, dann einfügen, wenn der Eintrag nicht existiert, aber das macht doppelt so viele Netzwerk-Anrufe und ich fühle mich wie es muss.

Dank

+0

Konfrontiert das gleiche Problem. Es wurde eine Abfrage erstellt, um die vorhandenen Objekte zu finden und dann nur die nicht vorhandenen Objekte zu speichern. – droidx

+0

Haben Sie eine Lösung? –

Antwort

0

Ich bin mir nicht sicher, ob ich verstehe Ihre Frage, aber Sie können die gleiche Funktionalität wie saveInBackgroundWithBlock in Android wie diese:

myObject.saveInBackground(new SaveCallback() { 
    public void done(ParseException e) { 
     if (e == null) { 
      myObjectSavedSuccessfully(); 
     } else { 
      myObjectSaveDidNotSucceed(); 
     } 
    } 
}); 
+0

Ich möchte vermeiden, doppelte Einträge zu speichern. – snotyak

+0

Sie konnten doppelte Einträge nur speichern, wenn Sie ein Objekt mehr als einmal aufrufen. Bitte geben Sie einen Kontext in Ihrer Frage an, damit wir verstehen, warum Sie mehrere Speicheraufrufe für dasselbe Objekt ausführen müssen. – bobbyrehm

3

Wie ich bereits im Kommentar erwähnt hatte, ich hatte das gleiche Problem konfrontiert. Es wurde eine Abfrage erstellt, um die vorhandenen Objekte zu finden und dann nur die nicht vorhandenen Objekte zu speichern. Wie unten.

// Angenommen, Sie haben eine Liste von ParseObjects. Diese Liste enthält sowohl die vorhandenen als auch die neuen Objekte.

List<ParseObject> allObjects = new ArrayList<ParseObject>(); 
allObjects.add(object); //this contains the entire list of objects. 

Sie möchten die vorhandenen herausfinden, indem Sie das Feld say ids verwenden.

//First, form a query 
ParseQuery<ParseObject> query = ParseQuery.getQuery("Class"); 
query.whereContainedIn("ids", allIds); //allIds is the list of ids 

List<ParseObject> Objects = query.find(); //get the list of the parseobjects..findInBackground(Callback) whichever is suitable 

for (int i = 0; i < Objects.size(); i++) 
     existingIds.add(Objects.get(i).getString("ids")); 

List<String> idsNotPresent = new ArrayList<String>(allIds); 
idsNotPresent.removeAll(existingIds); 

//Use a list of Array objects to store the non-existing objects 
List<ParseObject> newObjects = new ArrayList<ParseObject>(); 

for (int i = 0; i < selectedFriends.size(); i++) { 
    if (idsNotPresent.contains(allObjects.get(i).getString(
         "ids"))) { 
    newObjects.add(allObjects.get(i)); //new Objects will contain the list of only the ParseObjects which are new and are not existing. 
    } 
} 

//Then use saveAllInBackground to store this objects 

ParseObject.saveAllInBackground(newObjects, new SaveCallback() { 

    @Override 
    public void done(ParseException e) { 
    // TODO Auto-generated method stub 
    //do something 
     } 
    }); 

Ich hatte auch versucht beforeSave Methode auf ParseCloud verwenden. Wie Sie vielleicht wissen, wird diese Methode vor dem Speichern der Objekte unter ParseCloud aufgerufen und ist ideal, um eine Überprüfung durchzuführen. Aber es lief nicht ganz gut. Lassen Sie mich wissen, wenn Sie etwas aus dem ParseCloud Code benötigen.

Hoffe, das hilft!

+1

@ BackpackOnHead hat diese Hilfe? Hast du einen besseren Weg gefunden? Lass es mich wissen. Vielen Dank! – droidx

+0

Können Sie bitte diese ähnliche Frage beantworten http://stackoverflow.com/questions/25801533/what-ist-best-way-to-get-distinct-contacts-in-android? –

Verwandte Themen