2016-04-04 3 views
0

私はのtry/catch関数を使って、それを解決しようとしていたが、私はエラーを取得します。..データを読み込もうとするとアプリがクラッシュし、アプリがインターネットを持たないことを避けるにはどうすればよいですか?

NewtonSoft.Json.Linq.JObjectにbool型を変換暗黙的にすることはできません。明示的な変換があります(キャストがありませんか?)

..私はキャッチで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?) 
     } 

    } 
+1

代わりに 'null return'を使いたいと思います。関数が' Task 'を返したときに' false'を返そうとしています。これはコンパイラエラーの原因です。 –

+0

@David T. Macknet私がNullを返してwifiをオフにしてアプリケーションを使用すると、データを読み込むページでエラーが発生します。「オブジェクト参照がオブジェクトのインスタンスに設定されていません」 – medvedo

答えて

4

あなたのメソッドのシグネチャはそうあなたがキャッチにブール値を返すことができません

static public async Task<JObject> getInfo() 

です。 JObjectまたはnullを返す必要があります。

+0

Nullを返してwifiをオフにしてアプリケーションを使用すると、データを読み込むページでエラーが発生します。「オブジェクト参照がオブジェクトのインスタンスに設定されていません」 – medvedo

+1

nullを返す場合、 getInfo()メソッドを呼び出すとnullを処理できる必要があります。おそらくnullの結果をチェックし、ユーザーに「データは現在利用できません」というメッセージを表示するでしょうか? – Jason

+0

ああ。ありがとう。今私はそれを得る。どうもありがとう。 – medvedo

0

多分あなたはreturn nullを意味しますか?あなたのメソッドがTask<JObject>を返すと主張し、boolの値を返そうとしているので、コンパイラは不平を言っています。

(あなたがnullを返す場合はもちろん、あなたが呼び出し元のコードは、そのインスタンスに何をすべきかを知っていることを確認する必要があります。別のオプションは、例外がスローされ、それを高いアップをキャッチできるようにすることです。)

+0

コードでどのように見えますか? – medvedo

0

適切なことは、Exceptionを投げてUIレイヤーにキャッチし、ユーザーにアラートを表示することです。

また、単にこれを行うことができます:return default(JObject);の代わりreturn false;

+0

私のwifiを回してアプリケーションでデータを読み込もうとすると、返されたデフォルト(JObject)を使用すると「オブジェクトのインスタンスがオブジェクトのインスタンスに設定されていません」というエラーが発生します – medvedo

1

JObjectは、実際のオブジェクトです。 boolはオブジェクトではありません。

ただし、JTokenを返すことができます。

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

私もappropriate naming conventionsに従うことをGetInfoAsyncにあなたの方法を改名しました。

+0

彼は私の好きな作家です! – adv12

関連する問題