Android 在internet可用时按顺序同步脱机数据

Android 在internet可用时按顺序同步脱机数据,android,android-service,android-broadcast,Android,Android Service,Android Broadcast,我正在从事一个项目,该项目收集用户数据并存储在脱机SQLite数据库中,然后在互联网连接可用时开始同步 从我的SQLlite数据库中,我将一个接一个地同步那些状态为“待定”的条目 我制作了一些工作代码,但这些代码效率不高,我面临着这些问题 1-我的BroadcastReceiver仅在网络状态更改时激活,但在手机已连接到internet时不工作。我希望在互联网可用时开始同步数据,而不仅仅是在更改互联网状态后 2-我正在使用一个简单的循环,它从状态为“PENDING”的行的第一个索引开始,一直运

我正在从事一个项目,该项目收集用户数据并存储在脱机SQLite数据库中,然后在互联网连接可用时开始同步

从我的SQLlite数据库中,我将一个接一个地同步那些状态为“待定”的条目

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

1-我的BroadcastReceiver仅在网络状态更改时激活,但在手机已连接到internet时不工作。我希望在互联网可用时开始同步数据,而不仅仅是在更改互联网状态后

2-我正在使用一个简单的循环,它从状态为“PENDING”的行的第一个索引开始,一直运行到达到挂起项目的总数。我需要一种有效的方法来实现这一点。

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

函数#1
pendingContactCounter()
统计状态为“PENDING”的联系人数量。 例如,如果我们考虑上传的表图像,函数将返回2,因为两个联系人可用状态“待定”< /P>。 函数#2
pendingContactID()
返回状态为“PENDING”的第一行ID 从上图中,它将返回2,因为ID 2的状态为“待定”

为了检测互联网连接,我制作了这个广播接收器

 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!");
            }
        }
以及将“待定”条目更新为“已发送”的服务

公共类上传服务扩展了IntentService{
私人整数总请求;
私有int挂起id;
公共上传服务(){
超级(“上传服务”);
}
@凌驾
受保护的手部内容无效(意图){
DatabaseHandler db=新的DatabaseHandler(getApplicationContext());
请求总数=db.pendingContactCounter();
pending_id=db.pendingContactID();
Log.d(“总请求:”、“”+总请求);
Log.d(“待定ID:,”+待定ID);

对于(int i=pending_id;i如果用户离线提交数据,提交后您可以检查是否有网络,它将启动数据上传服务。否则将保留在本地数据库中。要检查Internet连接,您可以使用具有指定时间间隔的报警管理器检查网络状态。如果有网络,它将检查网络,启动数据上传。H你的问题有答案吗?
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>