読者です 読者をやめる 読者になる 読者になる

万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Xamarin プログラミングもくもく会 #4

Xamarin プログラミングもくもく会 #4 - 主にC#もくもく会 | Doorkeeper

アイコンの設定

・ここが詳しい Hello, iOS - Xamarin : XLsoft エクセルソフト

・アイコンのサンプルのzipのURLのパスはこれが正しい http://developer.xamarin.com/guides/android/getting_started/hello,android/Resources/XamarinAppIconsAndLaunchImages.zip

このサイトの↓の項目が実際に見つからない。

アイコン

f:id:shinriyo:20160811110751p:plain

スプラッシュ

f:id:shinriyo:20160811110800p:plain

↓現実

f:id:shinriyo:20160811111116p:plain

f:id:shinriyo:20160811111129p:plain

WebViewのcssやjsのパスについて

Xamarin.FormsでWebビューを使用するには? - Build Insider

YouTubeのURLを指定すればをvideoタグに直接入れられるプラグイン MediaElement.js - HTML5 video player and audio player with Flash and Silverlight shims

広告

AmazonにXamarin用プラグインがある(Unityも)

クロスプラットフォームエンジン用のモバイル広告プラグイン - アマゾン アプリ 開発者ポータル

csvプラグイン

コレを使用 https://github.com/JoshClose/CsvHelper/

"1", "2"CSVの場合、"1""2"となる。 "は書かない方がいい。 エスケープするときは"""1"のようだ。

※RFC4180的にはどちらでも良い。

1, 2と書いてる場合はカンマの後の半角スペースを消す方がいいと思う。 → 1,2

作者のissue

https://github.com/JoshClose/CsvHelper/issues/458#issuecomment-239072342

Label内での改行

CSVに書くときは<br />を書いておき、表示するときEnvironment.NewLineでリプレースした。

Desc = detail.Replace("<br />", Environment.NewLine)

トランザクション

もともと

// ①CSVファイルのDLするメソッド
static async Task<string> GetWebPageAsync(Uri uri)
{
    // do something. 
}
// ①を実行 & Realmの操作
        public static void Hoge(
            ref int id,
            string lang, int type, HttpClient httpClient,
            string url
        )
        {
            // 取得したいWebページのURI.
            Uri webUri = new Uri(url);

            // GetWebPageAsyncメソッドを呼び出す
            Task<string> webTask = httpClient.GetStringAsync(webUri);

            // Mainメソッドではawaitできないので、処理が完了するまで待機する.
            webTask.Wait();

            // RealmにInsertするコード
            do something.....
        }
public static async Task<bool> Initialization()
{
    Hoge();
    Hoge();
    Hoge();
}

トランザクションエラー。

おそらくCSVのダウンロードが投げっぱなしになり、前後関係を待たずにCSVをInsertしているから?

Take 1

public static async Task<bool> Initialization()
{
    var str1 = await csv1のDL();
    var str2 = await csv2のDL();
    var str3 = await csv3のDL();

    str1とRealmに入れるメソッド();
    str2とRealmに入れるメソッド();
    str3とRealmに入れるメソッド();
}

csvをstringに入れることでメモリ足りなくなって?、シミュレータが落ちる。

Take2 Realmにいれたらstrを使いまわして無駄に変数に突っ込まないようにする

var str = csv1のDL();
// このラムダ式で挟む
await Task.Run(() =>
{
    strをRealmに入れるメソッド();
}

str = await csv2のDL();
await Task.Run(() =>
{
    strをRealmに入れるメソッド();
}
str = await csv3のDL();
await Task.Run(() =>
{
    strをRealmに入れるメソッド();
}

→が・・・まだTransactionエラーがたまに・・・ 一応エラー時にはダイアログ入れた。

Unityとの対応覚書

Unity 非同期プログラミング
IEnumerator async Task返り値を使わない時は単にasync Task
yield return await
yield break return の値を普通に返す。