C# 当我尝试加载数据且应用程序没有互联网时,如何避免应用程序崩溃?

C# 当我尝试加载数据且应用程序没有互联网时,如何避免应用程序崩溃?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我试图通过使用try/catch函数来解决这个问题,但我得到了错误 无法将类型bool隐式转换为NewtonSoft.Json.Linq.JObject。存在显式转换(是否缺少强制转换?) …当我试图在捕获时返回false时。代码如下: static public async Task<JObject> getInfo () { var httpClientRequest = new HttpClient (); try {

我试图通过使用try/catch函数来解决这个问题,但我得到了错误

无法将类型bool隐式转换为NewtonSoft.Json.Linq.JObject。存在显式转换(是否缺少强制转换?)

…当我试图在捕获时返回false时。代码如下:

static public async Task<JObject> getInfo ()
    {
        var httpClientRequest = new HttpClient ();
        try {

            //connection
            var result = await httpClientRequest.GetAsync ("localhost");

            var resultString = await result.Content.ReadAsStringAsync ();

            var jsonResult = JObject.Parse (resultString);

            return jsonResult;

        } catch {
        //no connection
            return false; //ERROR: Cannot implicity convert type bool to NewtonSoft.Json.Linq.JObject. An explicit conversion exists (are you missing a cast?)
        }

    } 
静态公共异步任务getInfo()
{
var httpClientRequest=newhttpclient();
试一试{
//联系
var result=await httpClientRequest.GetAsync(“localhost”);
var resultString=await result.Content.ReadAsStringAsync();
var jsonResult=JObject.Parse(resultString);
返回jsonResult;
}抓住{
//没有联系
return false;//错误:无法将类型bool隐式转换为NewtonSoft.Json.Linq.JObject。存在显式转换(是否缺少转换?)
}
} 

也许您的意思是
返回null
?编译器正在抱怨,因为您的方法声明返回一个
任务
,而您正试图返回一个
bool


(显然,如果您返回
null
,您必须确保调用代码知道在该实例中该做什么。另一个选项是允许抛出异常并将其捕获到更高的位置。)

您的意思可能是
返回null
?编译器正在抱怨,因为您的方法声明返回一个
任务
,而您正试图返回一个
bool


(显然,如果您返回
null
,您必须确保调用代码知道在该实例中要做什么。另一个选项是允许抛出异常并将其捕获到更高的位置。)

您的方法签名是

static public async Task<JObject> getInfo ()
静态公共异步任务getInfo()

所以你不能在接球时还手。您必须返回JObject或null。

您的方法签名为空

static public async Task<JObject> getInfo ()
静态公共异步任务getInfo()

所以你不能在接球时还手。您必须返回一个JObject或null。

正确的做法是抛出一个
异常,并在UI层捕获它,并向用户显示一个警报


您也可以这样做:
返回默认值(JObject)
而不是
返回false

正确的做法是抛出一个
异常
并在UI层捕获它,并向用户显示一个警报


您也可以这样做:
返回默认值(JObject)
而不是
返回false

JObject
是实际对象<代码>布尔
不是对象

但是,您可以返回
JToken

static public async Task<JToken> GetInfoAsync()
{
  var httpClientRequest = new HttpClient ();
  try {
    ...
  } catch {
    //no connection
    return new JValue(false);
  }
}
静态公共异步任务GetInfoAsync() { var httpClientRequest=newhttpclient(); 试一试{ ... }抓住{ //没有联系 返回新的JValue(false); } }

我还将您的方法重命名为
GetInfoAsync
,以遵循。

JObject
是一个实际对象<代码>布尔
不是对象

但是,您可以返回
JToken

static public async Task<JToken> GetInfoAsync()
{
  var httpClientRequest = new HttpClient ();
  try {
    ...
  } catch {
    //no connection
    return new JValue(false);
  }
}
静态公共异步任务GetInfoAsync() { var httpClientRequest=newhttpclient(); 试一试{ ... }抓住{ //没有联系 返回新的JValue(false); } }
我还将您的方法重命名为
GetInfoAsync
,以遵循。

您想
返回null
而不是-当您的函数说它返回
任务时,您试图返回
false
,这是编译器错误的根源。@David T.Macknet当我返回null时,关闭wifi并使用应用程序我在加载数据的页面上发现错误:
对象引用未设置为对象的实例
您希望
返回null
-当您的函数说它返回
任务时,您试图返回
false
,这就是编译器错误的来源。@David T.Macknet当我返回Null并关闭wifi并使用应用程序时,我在加载数据的页面上发现错误:
对象引用未设置为对象的实例
他是我最喜欢的作者之一!他是我最喜欢的作家之一!当我打开wifi并尝试在应用程序中加载数据时,当我使用返回默认值(JObject)时,会出现错误“对象引用未设置为对象实例”。当我打开wifi并尝试在应用程序中加载数据时,当我使用返回默认值(JObject)时,会出现错误“对象引用未设置为对象实例”。当我返回Null时,会出现错误,然后关闭wifi并使用应用程序I get the error on the page加载数据:
对象引用未设置为对象的实例
如果返回空值,则调用getInfo()方法的代码需要能够处理空值。可能检查空结果,并向用户显示消息“数据当前不可用”?啊,好的。谢谢现在我明白了。非常感谢。当我返回Null并关闭wifi并使用应用程序时,我会在加载数据的页面上看到错误:
对象引用未设置为对象的实例
如果返回Null,则调用getInfo()方法的代码需要能够处理Null。可能检查空结果,并向用户显示消息“数据当前不可用”?啊,好的。谢谢现在我明白了。非常感谢。