【发布时间】: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 年以来,这种方法已经改变,但我会尝试。