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

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

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

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

Q&A

1回答

1098閲覧

xamarin.formsのC#のコードの書き方について(xamarin.forms,C#初心者です)

takenokox

総合スコア12

C#

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

0グッド

0クリップ

投稿2018/11/29 08:55

前提・実現したいこと

RandomUserGeneratorのAPIを使って名前と写真を表示したいです。以下のサイトを参考にURL部分を編集して名前を表示させようとしたのですが、うまくいきません。

https://qiita.com/rykgy/items/942d4e34be279fe06105

他にどの部分を編集すればよいでしょうか。どなたか回答よろしくお願い致します。

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

エラーメッセージ

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using Xamarin.Forms; 6using System.Threading.Tasks; 7using System.Net.Http; 8using System.Runtime.Serialization.Json; 9using System.IO; 10using Newtonsoft.Json; 11 12 13namespace toshiapp 14{ 15 public partial class GeneratorPage : ContentPage 16 { 17 public ListView listView; 18 public List<QiitaArticleEntity> articleList; 19 20 public GeneratorPage () 21 { 22 InitializeComponent (); 23 24 listView = new ListView 25 { 26 RowHeight = 60 27 }; 28 29 listView.ItemsSource = new String[] { 30 "ダミーテキスト", 31 "ダミーテキスト", 32 "ダミーテキスト", 33 "ダミーテキスト", 34 "ダミーテキスト", 35 }; 36 37 Content = new StackLayout 38 { 39 VerticalOptions = LayoutOptions.FillAndExpand, 40 Children = { listView } 41 }; 42 43 fetchArticles(new RandomAPI()); 44 } 45 46 // 非同期でデータ取得のメソッドを実行するメソッド 47 async void fetchArticles(RandomAPI api) 48 { 49 50 try 51 { 52 // 取得したデータをListに設定 53 articleList = await api.AsyncGetWebAPIData(); 54 55 var items = new List<String>(); 56 foreach (QiitaArticleEntity value in articleList) 57 { 58 items.Add(value.name); 59 } 60 listView.ItemsSource = items; 61 } 62 // エラー表示処理 63 catch (System.Exception ex) 64 { 65 await DisplayAlert("Error", ex.Message.ToString(), "OK"); 66 } 67 68 } 69 } 70}

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Threading.Tasks; 4using Xamarin.Forms; 5using System.Net.Http; 6using System.Runtime.Serialization.Json; 7using Newtonsoft.Json; 8 9namespace toshiapp 10{ 11 public class RandomAPI 12 { 13 public List<QiitaArticleEntity> articleList; 14 15 // QiitaAPIのURl 16 public string API_URL = "https://randomuser.me/api/"; 17 18 // データを取得するメソッド 19 public async Task<List<QiitaArticleEntity>> AsyncGetWebAPIData() 20 { 21 // Listの作成 22 articleList = new List<QiitaArticleEntity>(); 23 // HttpClientの作成 24 HttpClient httpClient = new HttpClient(); 25 // 非同期でAPIからデータを取得 26 Task<string> stringAsync = httpClient.GetStringAsync(API_URL); 27 string result = await stringAsync; 28 // JSON形式のデータをデシリアライズ 29 articleList = JsonConvert.DeserializeObject<List<QiitaArticleEntity>>(result); 30 31 // List でデータを返す 32 return articleList; 33 } 34 } 35 36 public class QiitaArticleEntity 37 { 38 public string name { get; set; } 39 } 40} 41

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2018/11/29 09:06

うまくいかないとは、どーゆーふーにうまくいかないんでしょうか。どういう動作をするんでしょう
takenokox

2018/11/29 09:17

ありがとうございます。Andoroidエミュレーターの画面にデシリアライズができないという旨のエラーが表示されます。
y_waiwai

2018/11/29 10:26

なら、それそのまま、デシリアライズができないものと思われますが、そこんところはどういうデータが取得されてるかみてみましょう。
takenokox

2018/11/29 11:40

どのような方法で見ればよいでしょうか。
guest

回答1

0

https://randomuser.me/api/を叩くと下記のJSONが返ってきました。

json

1{ 2 "results": [ 3 { 4 "gender": "female", 5 "name": { 6 "title": "mrs", 7 "first": "phoebe", 8 "last": "wang" 9 }, 10 "location": { 11 "street": "3855 worcester street", 12 "city": "lower hutt", 13 "state": "nelson", 14 "postcode": 11109, 15 "coordinates": { 16 "latitude": "61.3427", 17 "longitude": "61.9331" 18 }, 19 "timezone": { 20 "offset": "+10:00", 21 "description": "Eastern Australia, Guam, Vladivostok" 22 } 23 }, 24 "email": "phoebe.wang@example.com", 25 "login": { 26 "uuid": "cd9f6f67-0ff0-4e68-971d-36e0f7f1db4f", 27 "username": "ticklishelephant441", 28 "password": "andyod22", 29 "salt": "70d5AIdB", 30 "md5": "873e7b0f840c608ba3307f44be360b3e", 31 "sha1": "bf63a600d01ede2ef4dfd342ea13a30873535333", 32 "sha256": "f18663dc36d811fa2fb9b3feeb4f1ed49264ae9ea15f7e501e033826690d09a6" 33 }, 34 "dob": { 35 "date": "1994-01-29T14:20:09Z", 36 "age": 24 37 }, 38 "registered": { 39 "date": "2002-12-05T19:49:23Z", 40 "age": 15 41 }, 42 "phone": "(490)-872-9603", 43 "cell": "(217)-302-9277", 44 "id": { 45 "name": "", 46 "value": null 47 }, 48 "picture": { 49 "large": "https://randomuser.me/api/portraits/women/95.jpg", 50 "medium": "https://randomuser.me/api/portraits/med/women/95.jpg", 51 "thumbnail": "https://randomuser.me/api/portraits/thumb/women/95.jpg" 52 }, 53 "nat": "NZ" 54 } 55 ], 56 "info": { 57 "seed": "980b64a3121de176", 58 "results": 1, 59 "page": 1, 60 "version": "1.2" 61 } 62}

今シリアライズされようとしてるQiitaArticleEntityですが(名前変えた方がいいんじゃないでしょうか…)

C#

1public string name { get; set; }

nameってどこのことでしょう?

要は箱側もJSONと合わせないとダメです。

投稿2018/11/29 23:16

yy_tn

総合スコア299

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

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

takenokox

2018/11/30 00:13

回答ありがとうございます。nameはJSONの上から5行目のnameのことです。ここの指定がおかしいのでしょうか。
yy_tn

2018/11/30 01:26

箱側もJSONと合わせないとダメの部分です。 逆に質問なんですが、返ってきたJSONの、 "results"の"name"のさらに"title"、"first"、"last"とあるものをC#側のただのstringプロパティ(name)にどうやって入ると思います?
takenokox

2018/11/30 05:11

すみません、C#に関して理解していないもので。箱の作り方がわからないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問