2016-06-14 11 views
0

您好我想用火力點,我的服務器大約有300條記錄這是越來越單一,單一的方式獲得由火力點,並存儲在sqlite的散裝價值爲Android應用

着與我的應用程序同步在3到四分鐘它是如獲得記錄在50集或什麼? 如果用戶在很長一段時間後上線,那麼我也需要這個批處理。

如果用戶正在安裝的應用程序第一次,然後還我需要從數據庫火力

下載批量記錄我使用

ValueEventListener valueEventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Log.e(TAG, "addListenerForSingleValueEvent:onDataChange" + dataSnapshot.getValue()); 

     reference.removeEventListener(valueEventListener); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.e(TAG, "addListenerForSingleValueEvent:onCancelled" + databaseError.getMessage()); 
    } 
}; 

public class DBService extends Service { 

private static final String TAG = DBService.class.getName(); 
private StartApplication application; 
private ObjectMapper objectMapper; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    application = ((StartApplication) getApplication()); 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference reference = database.getReference(); 
    objectMapper = new ObjectMapper(); 
    ChildEventListener childEventListener = new ChildEventListener() { 

     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 

      try { 
       String json = objectMapper.writeValueAsString(dataSnapshot.getValue()); 
       Job job = objectMapper.readValue(json, Job.class); 
       ContentValues values = ContentValuesParser.parseJobs(job); 
       Uri uri = getContentResolver().insert(TableContract.JobsEntry.CONTENT_URI, values); 
       Log.d(TAG, "child add id " + job.getId() + " Uri " + uri.getEncodedPath()); 
      } catch (Exception e) { 
       Log.e(TAG, e.getMessage(), e); 
      } 
      //Uri uri = getContentResolver().insert(TableContract.JobsEntry.CONTENT_URI, values); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) { 

      try { 
       String json = objectMapper.writeValueAsString(dataSnapshot.getValue()); 
       Job job = objectMapper.readValue(json, Job.class); 
       ContentValues values = ContentValuesParser.parseJobs(job); 
       Uri uri = getContentResolver().insert(TableContract.JobsEntry.CONTENT_URI, values); 
       Log.d(TAG, "child changed id " + job.getId() + " Uri " + uri.getEncodedPath()); 
      } catch (Exception e) { 
       Log.e(TAG, e.getMessage(), e); 
      } 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }; 
    reference.child("jobs").addChildEventListener(childEventListener); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
}} 
+0

你可以在你的火力點申請查詢參數。檢查此鏈接:https://firebase.google.com/docs/database/android/retrieve-data#data-order –

+0

所以我應該日期時間參數添加到每個對象,並基於該查詢或火力自動添加updatedate或創建日期? –

+0

當你調用'推()'火力地堡自動生成一個保證是唯一和永遠增加的關鍵。所以你可以使用'reference.orderByKey()。startAt(lastSeenKey)'來獲得新的項目。 –

回答

1

你試過Querying data

 Query queryRef = ref.orderByChild("weight").limitToLast(50); 
//This will fetch the last 50 children. 

queryRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot snapshot, String previousChild) { 
      System.out.println(snapshot.getKey()); 
     }