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

时间:2016-04-04 21:48:02

标签: c# xamarin xamarin.forms

我试图通过使用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?)
        }

    } 

4 个答案:

答案 0 :(得分:4)

您的方法签名是

static public async Task<JObject> getInfo ()

所以你不能在捕获物上返回一个bool。你必须返回一个JObject,或者为null。

答案 1 :(得分:1)

JObject是一个真正的对象bool不是对象。

但是,您可以返回JToken

static public async Task<JToken> GetInfoAsync()
{
  var httpClientRequest = new HttpClient ();
  try {
    ...
  } catch {
    //no connection
    return new JValue(false);
  }
}

我还将您的方法重命名为GetInfoAsync,以跟随appropriate naming conventions

答案 2 :(得分:0)

也许你的意思是return null?编译器抱怨,因为您的方法声称返回Task<JObject>并且您尝试返回bool值。

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

答案 3 :(得分:0)

正确的做法是抛出Exception并在UI层中捕获它并向用户显示警告。

你也可以这样做:return default(JObject);而不是return false;