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

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

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

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

Xamarin

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

Q&A

解決済

2回答

1750閲覧

XamarinのDevDaysのサンプルコードの内容について

Kei_s

総合スコア7

C#

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

Xamarin

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

1グッド

0クリップ

投稿2016/11/13 03:42

###前提・実現したいこと
https://github.com/chomado/xamarin-dev-doc/tree/master/hands-on
Xamarin Dev Days Tokyoのサンプルコードを実行していてわからない部分があったので質問させてください.

###発生している問題・エラーメッセージ

質問1 宿題1: Cognitive ServicesのEmotionServiceクラスのメソッドGetHappinessAsync中で, var client = new HttpClient(); と記述していますが,利用している箇所が見当たりません.これは何をしているのでしょうか? 質問2 デバッグをすると,GetHappinessAsyncメソッドからの応答がありません. Azure上を見るとData InとData Outは出ているので通信まではうまくいっていると思うのですが,どこで停止しているのかがわかりません.

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

public class EmotionService { private static async Task<Emotion[]> GetHappinessAsync(string url) { var client = new HttpClient(); var emotionClient = new EmotionServiceClient("INSERT_EMOTION_SERVICE_KEY_HERE"); var emotionResults = await emotionClient.RecognizeAsync(url); if (emotionResults == null || emotionResults.Count() == 0) { throw new Exception("Can't detect face"); } return emotionResults; } //複数の被検対象が存在する場合の平均幸福度算出 public static async Task<float> GetAverageHappinessScoreAsync(string url) { Emotion[] emotionResults = await GetHappinessAsync(url); float score = 0; foreach (var emotionResult in emotionResults) { score = score + emotionResult.Scores.Happiness; } return score / emotionResults.Count(); } public static string GetHappinessMessage(float score) { score = score * 100; double result = Math.Round(score, 2); if (score >= 50) return result + " % ヽ(ヽ *゚▽゚*)ノ"; else return result + "% (;_;)"; } }

###試したこと
・HttpClientをコメントアウト=>特に変化なし
・ var emotionResults = await emotionClient.RecognizeAsync(url);をTry~Catch文で囲む=>Exceptionなし

###補足情報(言語/FW/ツール等のバージョンなど)
Windows10 Pro + VisualStudio2015Community
XamarinはStableの11/12時点の最新版です.

宜しくお願い致します。

betat👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは、Xamarin Dev Daysでサポートスタッフをしておりました者です。

回答1
var client = new HttpClient();
に関してはハンズオンテキストの修正漏れで不要なコードです。混乱させて申し訳ありません。
修正前は以下のように画像ファイルをローカルに取得してからEmotionServiceClientに渡す処理になっていたのですが、Windows 10アプリとしてUWPを実行した際に画像が大きすぎて解析できない事象が発生していたので変更した次第です。

csharp

1// 変更前 2var client = new HttpClient(); 3var stream = await client.GetStreamAsync(url); 4var emotionClient = new EmotionServiceClient("INSERT_EMOTION_SERVICE_KEY_HERE"); 5var emotionResults = await emotionClient.RecognizeAsync(stream); 6 7// 変更後 8var client = new HttpClient(); // 消し忘れ 9var emotionClient = new EmotionServiceClient("INSERT_EMOTION_SERVICE_KEY_HERE"); 10var emotionResults = await emotionClient.RecognizeAsync(url);

回答2
try~catchで囲った際にExceptionが発生しないというのは await emotionClient.RecognizeAsync(url)の処理が返ってこないという事でしょうか?
また、どの環境で実行した際の挙動でしょうか?

  • iOS 実機/シミュレータ
  • Android 実機/シミュレータ
  • UWP 実機/シミュレータ/ローカル

投稿2016/11/13 05:32

編集2016/11/13 05:37
yamamo

総合スコア37

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

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

Kei_s

2016/11/14 13:36

回答1について 回答ありがとうございます。疑問が解消しました。 回答2について もう一度コードを見直してみると、GetAverageHappinessScoreAsyncメソッドを呼び出す以下の文にawaitをつけ忘れていました。 var level = await EmotionService.GetAverageHappinessScoreAsync(this.speaker.Avatar); awaitをつけると動作しましたので、こちらは私のミスでした。回答ありがとうございます。
guest

0

こんにちは。
GetHappinessAsync の中のAPI キー INSERT_EMOTION_SERVICE_KEY_HERE は差し替えていますね?

投稿2016/11/13 09:03

NakamuraYoichi

総合スコア374

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問