Обнаружение изменений в подключении Xamarin Forms - PullRequest
0 голосов
/ 03 октября 2018

В настоящее время я использую Xamarin.Essentials.Connectivity для проверки моего интернет-соединения.Я использую код ниже, чтобы проверить, есть ли Интернет, прежде чем делать транзакцию.Как я могу проверить, есть ли изменения в моем интернет-соединении через мои формы?Например, у меня есть две (2) формы Форма входа и Главное меню , независимо от того, в какой форме я сейчас нахожусь, когда я выключаю Wi-Fi моего устройства, он будет отображать предупреждениемне что нет подключения к интернету.Как я могу достичь этого?

var current = Connectivity.NetworkAccess;

//Check if there is an internet connection
if (current == NetworkAccess.Internet)
{
   DisplayAlert("Ok", "Connected", "Ok");
}
else {
   DisplayAlert("Error", Connected, "Ok");
}

Я пытался использовать этот код из документации Xamarin.Essentials.Connectivity, но я не знаю, как это использовать и где поместить это

public class ConnectivityTest
{
   public ConnectivityTest()
   {
       // Register for connectivity changes, be sure to unsubscribe when finished
       Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
   }

   void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
   {
       var access = e.NetworkAccess;
       var profiles = e.Profiles;
   }
}

Мой код для синхронизации

public async void FirstSyncUser(string host, string database, string contact)
    {
        try
        {
            var db = DependencyService.Get<ISQLiteDB>();
            var conn = db.GetConnection();

            var sql = "SELECT * FROM tblUser WHERE ContactID = '" + contact + "'";
            var getUser = conn.QueryAsync<UserTable>(sql);
            var resultCount = getUser.Result.Count;

            //Check if the user has been sync
            if (resultCount < 1)
            {
                try
                {
                    syncStatus.Text = "Syncing User Data";

                    var link = Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=8qApc8";
                    string contentType = "application/json";
                    JObject json = new JObject
                    {
                        { "ContactID", contact }
                    };

                    HttpClient client = new HttpClient();
                    var response = await client.PostAsync(link, new StringContent(json.ToString(), Encoding.UTF8, contentType));

                    if (response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        if(content != "")
                        {
                            var userresult = JsonConvert.DeserializeObject<List<UserData>>(content);
                            for (int i = 0; i < userresult.Count; i++)
                            {
                                syncStatus.Text = "Syncing User Data " + (i + 1) + " out of " + userresult.Count;

                                var item = userresult[i];
                                var contactID = item.ContactID;
                                var userID = item.UserID;
                                var userPassword = item.UserPassword;
                                var userType = item.UserType;
                                var userStatus = item.UserStatus;
                                var lastSync = Convert.ToDateTime(item.LastSync);
                                var serverUpdate = Convert.ToDateTime(item.ServerUpdate);
                                var mobileUpdate = Convert.ToDateTime(item.MobileUpdate);

                                var user = new UserTable
                                {
                                    ContactID = Convert.ToInt32(contactID),
                                    UserID = userID,
                                    UserPassword = userPassword,
                                    UserType = userType,
                                    UserStatus = userStatus,
                                    LastSync = lastSync,
                                    ServerUpdate = serverUpdate,
                                    MobileUpdate = mobileUpdate
                                };

                                await conn.InsertAsync(user);
                            }
                        }
                        else
                        {
                            //Proceed to next function
                            FirstSyncContacts(host, database, contact);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("Syncing User Error " + ex.Message);
                }

                //Proceed to next function
                FirstSyncContacts(host, database, contact);
            }
            //If not get the user
            else
            {
                SyncUser(host, database, contact);
            }
        }
        catch (Exception ex)
        {
            Console.Write("Syncing User Error " + ex.Message);
        }
    }

1 Ответ

0 голосов
/ 03 октября 2018

Можете ли вы показать мне, как и где я могу поставить это?Чтобы использовать его глобально

Вот пример использования Essentials.Connectivity на уровне приложений форм с помощью переопределений OnStart, OnSleep и OnResume

public partial class App : Application
{
    ~~~~

    protected override void OnStart()
    {
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
    }

    protected override void OnSleep()
    {
        Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
    }

    protected override void OnResume()
    {
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
    }

    void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
    {
        Page page;
        if (MainPage is NavigationPage)
        {
            page = ((NavigationPage)MainPage).CurrentPage;
        }
        else
        {
            page = MainPage;
        }
        page.DisplayAlert("Status", e.NetworkAccess.ToString(), "OK");
    }

}
...