2016-11-29 6 views
0

Ich zeige einige Beiträge (erstellt von den Benutzern) in einer Aktivität mit einem benutzerdefinierten Adapter. Im Konstruktor des benutzerdefinierten Adapters verwende ich den folgenden Code, um das Abfrageergebnis zu erhalten. Vergleichen Sie ein Datum mit Nullwert

ParseQuery query = new ParseQuery("Post"); 
query.whereWithinMiles("location_point", my_point, 500); 
query.whereGreaterThan("expire_date", new Date()); 
return query; 

Das Ziel ist - der Benutzer kann ein Datum mit jedem Beitrag verfällt so eingestellt, dass die Post wird nicht mehr nach Ablauf sichtbar. Ich versuche, die expire_date Spalte mit aktuelle Zeit zu vergleichen, um zu überprüfen, ob der Beitrag abgelaufen ist oder nicht.

Die Zeile query.whereGreaterThan("expire_date", new Date()); wurde später hinzugefügt. Alle zuvor erstellten Zeilen haben null Wert in der Spalte expire_date.

Also jedes Mal, wenn ich die Abfrage ausführen, werden alle Zeilen, die ein Datum Objekt hat in EXPIRE_DATE Spalte werden entsprechend dem Zustand geprüft. Die Zeilen mit einem Nullwert in expire_date Spalte werden nie zurückgegeben.

Hinweis: Die Spalte expire_date ist kein Pflichtfeld (der Benutzer kann festlegen, dass er beim Erstellen eines Beitrags leer gelassen wird).

Ja, ich kann ein Standarddatum für alle Leer-/Nullfelder festlegen, die mit dem Ablaufdatum verglichen werden. Aber ich war neugierig zu wissen, ob es einen Weg gibt, so dass ich entweder alle Zeilen mit einem Null-Wert zurückgeben kann oder die aktuelle Zeit mit einem Null-Objekt mit der whereGreaterThan Bedingung vergleichen kann?

+1

Haben Sie eine OR-Abfrage versucht? http://stackoverflow.com/questions/28892973/multiple-combined-or-ranches-using-android-parse – nasch

+0

Dank mate. Ich habe den Job mit OR-Abfrage erledigt. :) @nasch –

Antwort

1
ParseQuery notExpiredPosts = new ParseQuery("Post"); 
query.whereGreaterThan("expire_date", new Date()); 

ParseQuery noExpiredDate = new ParseQuery("Post"); 
query.doesNotExist("expire_date"); 

ParseQuery expiredDateQuery = ParseQuery.or(notExpiredPosts, noExpiredDate); 

ParseQuery query = new ParseQuery("Post"); 
query.whereWithinMiles("location_point", my_point, 500); 
query.whereMatchesKeyInQuery("objectId", "objectId", expiredDateQuery); 
return query; 

[(NotExpiredPost || NoExpiredDate) & (location_point innerhalb von 500 Meilen)]

Dies ist, was Sie wollen, ist es nicht?

Hoffe das hilft :)

+0

Ich habe einige syntaktische Änderungen an Ihrem Code vorgeschlagen. Vielen Dank für Ihre Richtlinie, es hat sehr geholfen! :) –

+0

Ich bin froh, dass es geholfen hat. Viel Spaß beim Programmieren :) –

Verwandte Themen