从firebase获取批量价值并在sqlite中存储到Android应用程序中

时间:2016-06-14 07:41:59

标签: android firebase

您好我正在尝试使用firebase,我的服务器有大约300条记录,可以在3到4分钟内以单一方式同步我的应用

不能像50集或者什么一样获得记录? 如果用户在很长一段时间后上线,那么我也需要这个批处理。

如果用户第一次安装应用程序,那么我还需要从firebase数据库下载批量记录

我正在使用

 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;
}}

1 个答案:

答案 0 :(得分: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());
        }