2016-06-14 9 views
0

にsqliteの中firebaseと店からバルク値を取得し、私のサーバーは、単一の、単一の方法で3〜4分こんにちは私はfirebaseをしようとしていたAndroidアプリ

カントに私のアプリと同期取得された約300の記録を持っていますそれは50何かのセットでレコードを取得するようなものですか? 非常に長い時間が経過してもユーザーがオンラインになる場合は、このバッチ処理が必要です。

ユーザーがアプリを初めてインストールした場合は、その後も、私はあなたがQuerying dataを試してみました、私は

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

firebaseにクエリパラメータを適用できます。このリンクを確認してください:https://firebase.google.com/docs/database/android/retrieve-data#data-order –

+0

私はすべてのオブジェクトにdatetimeパラメータを追加し、そのクエリに基づいてORベースを自動的に追加または作成します日付? –

+0

'push()'を呼び出すと、Firebaseは一意になり常に増加することが保証されたキーを自動生成します。したがって、 'reference.orderByKey()。startAt(lastSeenKey)'を使って新しい項目だけを取得することができます。 –

答えて

1

を使用していますfirebaseデータベースから

を一括記録をダウンロードする必要がありますか?

 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()); 
     } 
関連する問題