只要有互联网,就按顺序同步离线数据

Syncing offline data sequentially whenever internet is available

提问人:Falling Into Infinity 提问时间:6/27/2014 更新时间:11/26/2016 访问量:1340

问:

我正在做一个收集用户数据并存储在离线 SQLite 数据库中的项目,稍后只要互联网连接可用,就会开始同步。

从我的SQLlite数据库中,我正在将这些条目一一同步,状态为“PENDING”enter image description here

我制作了一些工作代码,但这些代码效率不高,我面临着这些问题。

1 - My BroadcastReceiver 仅在网络状态更改时激活,但当手机已连接到互联网时,它不起作用。我想在互联网可用时开始同步数据,而不仅仅是在更改互联网状态之后

2 - 我正在使用一个简单的循环,该循环从状态为“PENDING”的行的第一个索引开始,一直运行到达到待处理项的总数。我想要一种有效的方法来做到这一点。

我在 DatabaseHandler 类中使用了这两个函数,

函数 #1,用于计算状态为“待处理”的联系人数量。 例如,如果我们考虑上传的表格图像,该函数将返回 2,因为两个联系人可用,状态为“PENDING”pendingContactCounter()

函数 #2 返回状态为“PENDING”的第一行的 ID 从上图中,它将返回 2,因为 ID 2 的状态为“待处理”pendingContactID()

为了检测互联网连接,我制作了这个 BroadcastReceiver

 public class InternetReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            ConnectivityManager cm = ((ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE));
            if (cm == null)
                return;
            if (cm.getActiveNetworkInfo() != null
                    && cm.getActiveNetworkInfo().isConnected()) {
                // CONNECTED
                Log.d("CONNECTION STATUS", "CONNECTED!");

               Intent service_intent = new Intent(context, uploadService.class);
            context.startService(service_intent);
            }

            } else {
                // NOT CONNECTED
                Log.d("CONNECTION STATUS", "NOT CONNECTED!");
            }
        }

以及将“PENDING”条目更新为“SENT”的服务

public class uploadService extends IntentService {

    private int total_request;
    private int pending_id;

    public uploadService() {
        super("uploadService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        DatabaseHandler db = new DatabaseHandler(getApplicationContext());

        total_request = db.pendingContactCounter();
        pending_id = db.pendingContactID();

        Log.d("TOTAL REQUEST: ", "" + total_request);
        Log.d("PENDING ID: ", "" + pending_id);

        for (int i = pending_id; i <= total_request + 1; i++) {

            db.updateData(i, "SENT");
        }

    }
}

最后,清单如下所示,

<receiver android:name=".connectionReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.net.wifi.STATE_CHANGE" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

        <service android:name="uploadService" >
        </service>
android-service android-broadcast

评论


答: 暂无答案