質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

2222閲覧

Visual Studioによるクロスプラットフォームのチュートリアルコードについて

013dog

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2016/06/26 02:42

###前提・実現したいこと
現在、Visual Studio Community 2015とXamarinを使用したクロスプラットフォーム開発を試しています。
チュートリアルとして
https://msdn.microsoft.com/ja-jp/library/mt679501.aspx
にあるアプリを作ろうとしたのですが、実機のAndroidを接続して動作確認(ボタンを押下)したところVisual Stuido側でエラーが出て止まってしまいます。

###発生している問題・エラーメッセージ
まず始めに「ソースファイルの検索:SyncContext.cs」ダイアログが表示されました。
探してみても見つからないのでキャンセルボタンを押すと、
「Unhandled Exception : Microsoft.CSharp.RuntimeBilder.RuntimeBinderException:Cannot apply indexing with [] to an expression of type 'null'」というメッセージが書かれたダイアログが出ます。

###該当のソースコード

C#

1using Newtonsoft.Json; 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Net.Http; 6using System.Text; 7using System.Threading.Tasks; 8 9namespace WeatherApp 10{ 11 public class DataService 12 { 13 public static async Task<dynamic> getDataFromService(string queryString) 14 { 15 HttpClient client = new HttpClient(); 16 var response = await client.GetAsync(queryString); 17 18 dynamic data = null; 19 if (response != null) 20 { 21 string json = response.Content.ReadAsStringAsync().Result; 22 data = JsonConvert.DeserializeObject(json); 23 } 24 25 return data; 26 } 27 } 28}

###試したこと
デバッグで追ってみたところ、上記コードのGetAsyncのところでエラーが発生しているようでした。ただデバッグで止めていた場合はSyncContext.csの検索ではなく、Button.csの検索ダイアログが出てきます。

###補足情報(言語/FW/ツール等のバージョンなど)
テンプレートを作成した直後に指示に従ってNugetパッケージのXamarin.Formsの更新を行っているのですが、「Xamarin.Forms.2.3.0.49のパッケージのアンインストールができなかったため再起動せよ」というようなメッセージが出たのでVisual Studioを再起動しています。
WindowsのOSは8.1、試してみたAndroid実機のOSは4.2です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

dynamic型はコンパイル時に整合性が判断されず、実行時に判定されます。
その場合、エラーが発生した際にMicrosoft.CSharp.RuntimeBilder.RuntimeBinderExceptionがThrowされます。
ご提示頂いたサンプルを確認致しましたが、getDataFromServiceの呼び出し元で、getDataFromServiceの戻り値がnullとなっているかを確認されずにKey指定でデータを取得しております。
(サンプルのWeatherApp.Coreクラスです)

恐らくですが、getDataFromServiceメソッド内でresponseがnull、戻り値となるdataがnullとなり、呼び出し元でnullであるにも関わらず処理を継続している為発生しているのではないかと思います。
一度responseの値がnullかどうかをご確認下さい。

投稿2016/06/28 13:42

y-sakamoto

総合スコア194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

013dog

2016/07/02 02:07 編集

ミス投稿
013dog

2016/07/02 02:05

回答ありがとうございました。 結論を言いますと、WeatherApp.Coreの dynamic wind = weatherOverview["wind"]; 行でwind変数にnullが入っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問