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

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

新規登録して質問してみよう
ただいま回答率
85.48%
UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

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

Q&A

解決済

1回答

2449閲覧

UWPでWebAPIを使ったサンプルでエラー

picotoyou8

総合スコア8

UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

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

0グッド

0クリップ

投稿2017/12/12 13:21

C#でUWPのWebAPIを調べるため、ネットにあったサンプルを利用しようとしているのですが、「'await' 演算子は、非同期メソッド内でのみ使用できます。このメソッドに 'async' 修飾子を指定し、戻り値の型を 'Task' に変更することを検討してください。」とエラーが出ます。
まだ勉強中なため、根本がわかっていないのだと思いますが、このエラーは何が悪いためのエラーなのでしょうか?
初心者にわかりやすく教えて頂けるとありがたいです。
よろしくお願いいたします。

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.Web.Http; using Newtonsoft.Json.Linq; // 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 を参照してください namespace MaterialMatching_WebAPI { /// <summary> /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。 /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private void button_Click(object sender, RoutedEventArgs e) { //ここにボタンがクリックされた時の処理を書く string apiKey = "key"; string zipCode = "123-4567,jp"; string endpoint = string.Format( "http://api.openweathermap.org/data/2.5/weather?zip={0}&appid={1}", zipCode, apiKey ); //HttpClientを使って天気情報を取得する HttpClient client = new HttpClient(); HttpResponseMessage result = await client.GetAsync(new Uri(endpoint)); string json = await result.Content.ReadAsStringAsync(); //jsonを解析して結果を取得する JObject root = JObject.Parse(json); string weather = root["weather"].First()["main"].ToString(); textWeather.Text = weather; } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

C#

1private void button_Click(object sender, RoutedEventArgs e)

C#

1private async void button_Click(object sender, RoutedEventArgs e)

と書くべきでは?

投稿2017/12/12 13:47

hidori

総合スコア402

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

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

picotoyou8

2017/12/13 12:37

回答、ありがとうございます。 無事にエラーは回避できました。 ただ、実行してみるとボタンを押しても何の反応もしないのですが・・・ 現在、原因を探しているところです。
hidori

2017/12/13 13:13 編集

ブレークポイント設定してデバッグ実行、デバッガでステップ実行などしてみるといいんじゃないでしょうか。
picotoyou8

2017/12/14 11:26

回答、ありがとうございます。 private void button_Click(object sender, RoutedEventArgs e)が作成したボタンとリンクしていないだけでした。 おかげさまで、何とか動くようにはなったのですが、ループをさせて値を取得した時、取得元の値を変更しても同じ値しか取得できません。 そもそも、private void button_Click(object sender, RoutedEventArgs e)内でループさせて値を取得しようとすることが間違いなのでしょうか?
hidori

2017/12/14 18:57 編集

> ループをさせて値を取得した時、取得元の値を変更しても同じ値しか取得できません。 キャッシュされてるんじゃないですか? レスポンスヘッダにキャッシュ制御のヘッダが含まれてたりはしませんか? > そもそも、private void button_Click(object sender, RoutedEventArgs e)内でループさせて値を取得しようとすることが間違いなのでしょうか? ループが長時間に及ぶようなら、キャンセル可能とする等考えるべき点はありますが、 ループさせること自体は間違いではないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問