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

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

ただいまの
回答率

90.37%

  • C#

    9478questions

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

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 195

takenokox

score 2

 前提・実現したいこと

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

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

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

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

エラーメッセージ

 該当のソースコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
using System.Threading.Tasks;
using System.Net.Http;
using System.Runtime.Serialization.Json;
using System.IO;
using Newtonsoft.Json;


namespace toshiapp
{
    public partial class GeneratorPage : ContentPage
    {
        public ListView listView;
        public List<QiitaArticleEntity> articleList;

        public GeneratorPage ()
        {
            InitializeComponent ();

             listView = new ListView
            {
                RowHeight = 60
            };

            listView.ItemsSource = new String[] {
                "ダミーテキスト",
                "ダミーテキスト",
                "ダミーテキスト",
                "ダミーテキスト",
                "ダミーテキスト",
            };

            Content = new StackLayout
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                Children = { listView }
            };

            fetchArticles(new RandomAPI());
        }

        // 非同期でデータ取得のメソッドを実行するメソッド
        async void fetchArticles(RandomAPI api)
        {

            try
            {
                // 取得したデータをListに設定
                articleList = await api.AsyncGetWebAPIData();

                var items = new List<String>();
                foreach (QiitaArticleEntity value in articleList)
                {
                    items.Add(value.name);
                }
                listView.ItemsSource = items;
            }
            // エラー表示処理
            catch (System.Exception ex)
            {
                await DisplayAlert("Error", ex.Message.ToString(), "OK");
            }

        }
    }
}

 該当のソースコード

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.Net.Http;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;

namespace toshiapp
{
    public class RandomAPI
    {
        public List<QiitaArticleEntity> articleList;

        // QiitaAPIのURl
        public string API_URL = "https://randomuser.me/api/";

        // データを取得するメソッド
        public async Task<List<QiitaArticleEntity>> AsyncGetWebAPIData()
        {
            // Listの作成
            articleList = new List<QiitaArticleEntity>();
            // HttpClientの作成 
            HttpClient httpClient = new HttpClient();
            // 非同期でAPIからデータを取得
            Task<string> stringAsync = httpClient.GetStringAsync(API_URL);
            string result = await stringAsync;
            // JSON形式のデータをデシリアライズ
            articleList = JsonConvert.DeserializeObject<List<QiitaArticleEntity>>(result);

            // List でデータを返す
            return articleList;
        }
    }

    public class QiitaArticleEntity
    {
        public string name { get; set; }
    }
}

 試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/11/29 18:06

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

    キャンセル

  • takenokox

    2018/11/29 18:17

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

    キャンセル

  • y_waiwai

    2018/11/29 19:26

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

    キャンセル

  • takenokox

    2018/11/29 20:40

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

    キャンセル

回答 1

+1

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

{
    "results": [
        {
            "gender": "female",
            "name": {
                "title": "mrs",
                "first": "phoebe",
                "last": "wang"
            },
            "location": {
                "street": "3855 worcester street",
                "city": "lower hutt",
                "state": "nelson",
                "postcode": 11109,
                "coordinates": {
                    "latitude": "61.3427",
                    "longitude": "61.9331"
                },
                "timezone": {
                    "offset": "+10:00",
                    "description": "Eastern Australia, Guam, Vladivostok"
                }
            },
            "email": "phoebe.wang@example.com",
            "login": {
                "uuid": "cd9f6f67-0ff0-4e68-971d-36e0f7f1db4f",
                "username": "ticklishelephant441",
                "password": "andyod22",
                "salt": "70d5AIdB",
                "md5": "873e7b0f840c608ba3307f44be360b3e",
                "sha1": "bf63a600d01ede2ef4dfd342ea13a30873535333",
                "sha256": "f18663dc36d811fa2fb9b3feeb4f1ed49264ae9ea15f7e501e033826690d09a6"
            },
            "dob": {
                "date": "1994-01-29T14:20:09Z",
                "age": 24
            },
            "registered": {
                "date": "2002-12-05T19:49:23Z",
                "age": 15
            },
            "phone": "(490)-872-9603",
            "cell": "(217)-302-9277",
            "id": {
                "name": "",
                "value": null
            },
            "picture": {
                "large": "https://randomuser.me/api/portraits/women/95.jpg",
                "medium": "https://randomuser.me/api/portraits/med/women/95.jpg",
                "thumbnail": "https://randomuser.me/api/portraits/thumb/women/95.jpg"
            },
            "nat": "NZ"
        }
    ],
    "info": {
        "seed": "980b64a3121de176",
        "results": 1,
        "page": 1,
        "version": "1.2"
    }
}

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

public string name { get; set; }


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/30 09:13

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

    キャンセル

  • 2018/11/30 10:26

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

    キャンセル

  • 2018/11/30 14:11

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

    キャンセル

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

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9478questions

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