2016-10-11 7 views
5

नहीं कहा जाता है यह मेरा डेटा मॉडल है।आईओएस फ़ायरबेस सॉर्ट और सीमा - पर्यवेक्षक को

project-foo 
-posts 
    -KLs123412341234 
    key: "-KLs123412341234" 
    message: "free cupcakes" 
    time: 1467675688163 
    -... 
    key: "..." 
    message: "..." 
    time: ... 

मैं केवल पिछले 15 मिनट में पोस्ट प्राप्त करना चाहता हूं। मैं अपने फायरबेस कंसोल बच्चों को जोड़ा जा रहा हूं, लेकिन समस्या यह है कि पर्यवेक्षक को लागू नहीं किया जा रहा है - "hello" मुद्रित नहीं है।

Query query = mDatabase.orderByChild("time").startAt((double)startTime()); 
query.addChildEventListener(new PostListener(this, mMap)); 

class PostListener implements ChildEventListener { 
    public PostListener(Context context, GoogleMap map) { 
     ... 
    } 

    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     Log.i(TAG, "hello"); 
     ... 
    } 
} 

:

class ViewController: UIViewController { 

    var ref: FIRDatabaseReference? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ref = FIRDatabase.database().reference() 
     ref!.queryOrderedByChild("time") 
      .queryStartingAtValue(startTime()) 
      .observeEventType(.ChildAdded, withBlock: { snapshot in 
      print("hello") 
     }) 

    } 
} 

मेरे Android एप्लिकेशन निम्नलिखित कोड है, जो लागू हो करता है:

मेरे iOS एप्लिकेशन निम्नलिखित कोड है, जो लागू नहीं हो जाता है है अद्यतन: मेरी गलती यह महसूस नहीं कर रही थी कि मैंने mDatabase (एंड्रॉइड वे rsion) पथ posts के साथ। फिक्स FIRDatabase.database().reference() के बजाय FIRDatabase.database().referenceWithPath("posts") के साथ ref प्रारंभ करने के लिए बस था।

+0

क्या STARTTIME() कैसा दिखता है? –

+0

मैंने इसे शून्य पर सेट करने के साथ परीक्षण किया और इससे मदद नहीं मिली। – lf215

+0

रेफरी क्या है? ... – Dravidian

उत्तर

1

JSON संरचना के लिए,: - इस कोड

"posts" : { 
    "autoID1" : { 
    "key" : "autoID1", 
    "timestamp" : 101 
    }, 
    "autoID2" : { 
    "key" : "autoID2", 
    "timestamp" : 102 
    }, 
    "autoID3" : { 
    "key" : "autoID3", 
    "timestamp" : 103 
    }, 
    "autoID4" : { 
    "key" : "autoID4", 
    "timestamp" : 104 
    }, 
    "autoID5" : { 
    "key" : "autoID5", 
    "timestamp" : 105 
    }, 
    "autoID6" : { 
    "key" : "autoID6", 
    "timestamp" : 106 
    }, 
    "autoID7" : { 
    "key" : "autoID7", 
    "timestamp" : 107 
    } 
} 

का उपयोग करें: -

FIRDatabase.database().reference().child("posts").queryOrderedByChild("timestamp").queryStartingAtValue(101).queryEndingAtValue(103).observeEvenType(.Value, with: { (snap) in 
     if let snapDict = snap.value as? [String:AnyObject]{ 

      for each in snapDict{ 

       print(each.value) 

      } 
      } 
     }, withCancel: {(err) in 


    }) 

सुनिश्चित करें कि आपके सुरक्षा नियमों उपयोगकर्ता का उपयोग posts मूल्य के

पुनः प्राप्त करने के लिए अनुमति दे रहे बनाने .ChildAdded केवल तब कॉल किया जाता है जब उस डेटाबेस नोड में कोई बच्चा नोड जोड़ा जाता है। .Value का उपयोग करके आप पूरे डाटा जिसका टाइमस्टैम्प के बीच है पुनः प्राप्त करेगा उन मूल्य के

अब

सबसे अधिक संभावना के रूप में यह सिर्फ एक आदेश firebase सर्वर के लिए भेजा है कि विशेष नोड पर टाइमस्टैम्प जोड़ने के लिए है कि आप से FIRServerValue.timestamp() टाइमस्टैम्प मूल्य नहीं मिल सकता है ।

तो इसके बजाय अपने टाइमस्टैम्प को स्टोर करने के लिए कस्टम टाइमस्टैम्प का उपयोग करें, और अंत मूल्य के लिए बस उस टाइमस्टैम्प में 15 मिनट जोड़ें।

पढ़ें इस Manipulate NSDate

संबंधित मुद्दे