【问题标题】:How to upload data from SQLite to server in background when it will connect to Internet连接到 Internet 时如何在后台将数据从 SQLite 上传到服务器
【发布时间】:2015-08-20 07:31:10
【问题描述】:

我在 SQLite 中有一组记录(数据)我的目标是在连接到互联网时将记录(数据)上传到服务器,它应该在不通知用户的情况下上传记录(数据),并且不应该上传相同的数据两次。现在我可以使用 AsyncTask 在新数据到达时立即上传。

我想知道,逻辑是如何工作的。任何建议或工作示例将不胜感激。

【问题讨论】:

    标签: android sqlite android-asynctask


    【解决方案1】:

    使用BroadCastReceiver 在连接到互联网时获得通知。

    在活动中注册您的 BroadCastReciever 以获取 wifi 状态更改通知,或者您可以在清单中注册接收器。

    private void registerReceiver() {
            IntentFilter filter = new IntentFilter();
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
            registerReceiver(mReceiver, filter);
        }
    

    为了检查互联网连接,您可以使用以下类,

    public class CheckConnectivity {
        private Context _context;
    
        public CheckConnectivity(Context context) {
            this._context = context;
        }
    
        public boolean isConnectingToInternet() {
            ConnectivityManager connectivity = (ConnectivityManager) _context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i < info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return true;
                        }
    
            }
            return false;
        }
    
        public boolean hasActiveInternetConnection() {
            if (isConnectingToInternet()) {
                try {
                    HttpURLConnection urlc = (HttpURLConnection) (new URL(Constants.INTERNET_CONNECTION_URL).openConnection());
                    urlc.setRequestProperty("User-Agent", "Test");
                    urlc.setRequestProperty("Connection", "close");
                    urlc.setConnectTimeout(5000);
                    urlc.connect();
                    return (urlc.getResponseCode() == 200);
                } catch (IOException e) {
                    return false;
                }
            } else {
                return false;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2016-09-07
      • 2012-07-06
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多