Ich habe anfangs einen Fehler gemacht und vergessen, mein Array-Feld (Designs) bei der Benutzerregistrierung zu initialisieren, so dass in meinem Parse-Dashboard die Zeilen als (undefined)
angezeigt werden, wo ich sie bevorzugen würde []
. Ich muss dies für ungefähr 5000 Benutzer tun. Ich habe versucht, den folgenden Code:Wie kann ich alle Objekte in der Benutzerklasse im Stapel aktualisieren (Parse.com, Android)?
var query = new Parse.Query("User");
query.equalTo("designs", "(undefined)");
query.each(function(obj) {
obj.set("designs", "[]");
return obj.save();
}).then(function() {
// All objects updated.
}, function(err) {
console.log(err);
});
Ich denke (undefined)
etwas anderes sein sollte, aber ich bin mir nicht sicher, was, wie es ist wahrscheinlich kein String. Wie kann ich das lösen?
Update: Ein zweiter Versuch. Nähert sich das?
private void updateAllRows(final int skip) {
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.setLimit(500);
query.setSkip(skip);
query.whereDoesNotExist("designs");
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> results, ParseException e) {
if (results.size() > 0) {
// The query was successful.
for (int i = 0; i < results.size(); i++) {
ParseUser user = results.get(i);
String[] designs = new String[0];
user.put("designs", Arrays.asList(designs));
try {
ParseUser.saveAll(results);
if (results.size() >= 500) {
updateAllRows(skip + 500); // make a recursion call with different skip value
}
} catch (ParseException e1) {
e1.printStackTrace();
}
}
Log.d(getClass().toString(), ": The batch job was successfully completed.");
} else {
// The query was unsuccessful.
Log.d(getClass().toString(), ": The batch job was not successful.");
}
}
});
}
Ich nenne teh obige Funktion mit dem folgenden von onCreate Methode meiner Klasse:
int skip = 0;
updateAllRows(skip);
Ist dies der beste Weg, um dies zu realisieren, ohne Cloud-Code?
Fehler:
08-08 12:38:43.034 24003-24053/? E/HttpOperation: [luq{checkandengageuser, getmobileexperiments}] Unexpected exception
java.io.IOException: 1 of 2 operations in the batch failed
at luj.a(PG:268)
at lth.o(PG:10642)
at ltc.a(PG:1402)
at lth.i(PG:154)
at ly.f(PG:51849)
at dsr.a(PG:1255)
at dsr.a(PG:20077)
at dsr.a(PG:706)
at dss.run(PG:1548)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Ich bemerkte, dass dies in JavaScript geschrieben wurde. Ich habe meine Frage aktualisiert, um eine Version in Java einzuschließen. Ist das ganze Skipping Bit noch notwendig? Ich habe auch bemerkt, dass du "skip" als Parameter übergeben hast. Wie funktioniert das bei Android? – santafebound
es wurde in JS geschrieben, weil Ihr Beispiel in JavaScript war .. Ich werde die Android-Version –
Oh sorry lol. Meine Zwischenablage war buchstäblich durcheinander. Ich hatte irgendwo in Java eine Alternative geschrieben. – santafebound