【问题标题】:How to check the Internet connection before loading a page?如何在加载页面之前检查 Internet 连接?
【发布时间】:2019-06-21 14:32:53
【问题描述】:

在加载页面之前,我想在 Xamarin 中检查 Internet 连接。但是我遇到了这种类型的问题:

06-21 14:48:59.072 E / mono-rt (11985): /proc / self / maps: 得到了 执行本机代码时的 SIGSEGV。这通常表示致命 单声道运行时或您使用的本机库之一中的错误 应用。

using System.Collections.Generic;
using System;
using Xamarin.Forms;
using Newtonsoft.Json;
using System.Net;

namespace ConnectBDD
{
public partial class PageLecture : ContentPage 
{

public PageLecture()
{
InitializeComponent();

        //permet de rafraichir les données dans la "listeView" via une action 
        monViews.RefreshCommand = new Command((obj) =>
        {
            Console.WriteLine("refresh command");
            DownloadData((articles) =>
            {
                monViews.ItemsSource = articles;
                monViews.IsRefreshing = false;
            });
        });

        //Appel de la fonction de téléchargement + passage de Paramètre avec la fonction invoke
        DownloadData((articles) =>
            {
                monViews.ItemsSource = articles;
                monViews.IsVisible = true;
                waitLayout.IsVisible = false;
            });

        // permet d'afficher une description en cliquant sur les cellules de la liste
        monViews.ItemSelected += (sender, e) =>
        {
            // si cellule est active la condition est rempli
            if (monViews.SelectedItem != null)
            {
                // assigne item pour selection des données de la liste
                Article item = monViews.SelectedItem as Article;

                // Affiche un message si tu appui sur une cellule de la liste
                DisplayAlert(item.Nom, item.Description, "Ok");
                //si la valeur n'est pas null la cellule sera bloqué si on repush dessus
                monViews.SelectedItem = null;
            }
        };

    }
    private void DownloadData(Action<List<Article>> action)
    {
        // renseigne le liens de téléchargement du JSON avec une constante
        const string URL = "#######";

        //instance du webclient - Cas particulier pour cette appel, ça ce fait uniquement avec un using - (La tache sera détruite de la mémoire dès qu'elle sera terminé !)         

        Console.WriteLine("ETAPE 1");

        using (var webclients = new WebClient())
        {
            Console.WriteLine("ETAPE 2");

            // Prépare le téléchargement du fichier JSON - Asynchrone
            Console.WriteLine("ETAPE 3");
            webclients.DownloadStringCompleted += (object sender, DownloadStringCompletedEventArgs e) =>
            {

                string linkJson = "";
                try
                {
                    linkJson = e.Result;
                    Console.WriteLine("Données téléchargées");
                }
                catch (WebException wex)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        DisplayAlert("Erreur", "Il y a un problème : " + wex.Message, "OK");
                    });
                }
                catch (Exception ex)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        DisplayAlert("Erreur", "Il y a un problème : " + ex.Message, "OK");
                    });
                }
                // Convertir JSON en Objet
                //List<Article> articles; //en lien avec la class "Article" Génère une Liste et on passe celà dans la variables liste "articles"
                List<Article> articles = JsonConvert.DeserializeObject<List<Article>>(linkJson);

                // Et on revient sur la Mainthread pour sortir les données dans le XAML
                Device.BeginInvokeOnMainThread(() =>
                    {
                    // renvoie dans le XAML les données "articles" en lien avec x:Name "monViews" définis dans "listViews"
                    action.Invoke(articles); //permet le renvoi de paramètre via l'invoke
                    Console.WriteLine("ETAPE 5");

                    });
            };
            Console.WriteLine("ETAPE 4");
            webclients.DownloadStringAsync(new Uri(URL));
        }
    }
}

}

它适用于模拟器 Andoid Pie 9,但不适用于我的 Huawei P8 lite 2017!

在加载页面之前创建网络检查将是最简单的解决方案,除了我不知道允许我进行此验证的功能。 Microsoft 文档帮助不大!

您知道如何在加载页面之前检查 Xamarin 中的 Internet 连接吗?

【问题讨论】:

  • 那么,您的问题是如何检查 Xamarin 中的连接性?
  • 致 Bruno Caceiro:是的,我想在加载页面之前检查互联网连接。致欧文·鲍林:恐怕自 2010 年以来,这种方法已经改变,但我会尝试。

标签: c# json xamarin


【解决方案1】:

您可以使用 Xamarin Essentials 插件检查 Xamarin 项目中的 Internet 连接。

详细信息您需要Connectivity API

所以,首先安装Xamarin.Essentials nuget

然后添加命名空间:

using Xamarin.Essentials;

现在您可以检查互联网连接了:

var current = Connectivity.NetworkAccess;

if (current == NetworkAccess.Internet)
{
    // Connection to internet is available
}

【讨论】:

  • 非常感谢您的这一课,它有效!谢谢 ! GiampaoloGabba 私人静态 bool CheckConnection() { bool testConnection; var current = Connectivity.NetworkAccess; if (current == NetworkAccess.Internet) { testConnection = true;返回测试连接; } 其他 { testConnection = false;返回测试连接; } }
猜你喜欢
  • 2013-03-11
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多