スキップしてメイン コンテンツに移動

投稿

1月, 2023の投稿を表示しています

.NET MAUIでSqlite3はXamarin.Formsとほぼ同じ

2023/05/09 追記---------------- なんか、Androidで動かなくなったので調べていたら Nugetで「SQLitePCLRaw.bundle_green」の追加インストールが必要でした また、     /// < summary >     /// DBの作成ボタン     /// </ summary >     /// < param name = "sender" ></ param >     /// < param name = "e" ></ param >     private void SQLcreateBtn_Clicked( object sender, EventArgs e)     {         _dbCon = new SQLiteConnection(mkFullPath()); //メモリ上に_dbConを確保         _dbCon.CreateTable<VersionTbl>();               //VertionTblにそったテーブルを作成(既にテーブルが出来ていたら何もしない)     } SQLcreateBtn_Clicked関数の SQLiteConnectionの引数の追加し、フラグを追加し、下のようにしてください ・・・・・このテストをしたときは上のソースで動いてたんだけどね・・・     /// < summary >     /// DBの作成ボタン     /// </ summary >     /// < param name = "sender" ></ param >     /// < param name = "e" ></ param >     private void SQLcreateBtn_Clicked( object sender, EventArgs e)     {         _dbCon = new SQLiteConnection(mkFullPath() ,

.Net MAUIでJSONを読もう(3/3)

前のページからの続き このページはJSONでファイルを読んだ後の話で、JSONにデータの内容を書き出す話です リードだけしたい人には無関係な話です じゃあJSONのライト(シリアライズ) とは言え、何処に書くんだという話があるわけで まさか/Resourceに書くわけにはいかないわけです マイクロソフトの サイトを参考に「これを使え 」 となっているのでFileSystem.Current.AppDataDirectoryを使用してデータフォルダのルートを取得 そして、それを踏まえてシリアライズのコード 今度はライトのボタンを追加             < Button                 x:Name = "JsonWrite"                 Text = "JSONライト"                 Clicked = "JsonWrite_Clicked" /> リードしたデータを書き込む形にしたので、リード側もちょっと修正 んで、このプログラムは リードボタンをクリックしてからライトしないと まともに動作しないので悪しからず     Rootobject _testJsonObj ;     private async void JsonRead_Clicked ( object sender , EventArgs e )     {         using var stream = await FileSystem . OpenAppPackageFileAsync ( "testfile.json" );         using var reader = new StreamReader ( stream );           var contents = reader . ReadToEnd ();         _testJsonObj = JsonSerializer . Deserialize < Rootobject >( contents );     }     private void JsonWrite_Clicked ( object s

.Net MAUIでJSONを読もう(2/3)

前のページからの続き まずはJSONのリード(デシリアライズ) 普通のテキストファイルが読めたので次はJSONのリード こんなJsonファイルを準備(適当すぎるかも?)まあ、ネストもしてるし配列もカバーできてるのでいいかな {   "count": "最初",   "tablename": {     "colmn1": "カラム1",     "colmn2": "カラム2"   },   "args": [     {       "name": "太郎",       "age": 25     },     {       "name": "二郎",       "age": 22     }   ] } JSONファイルはちゃんとタグが書けてないとリードするときにエラーになったりするので、確認できる手段が必要だけど何時もFirefoxで確認してます 何で他のブラウザーは対応してくれないのかねぇ こんな感じで自分の狙ったとおりになっていたらファイルはOK(上の画像はこの後編集したので項目名が変ですけど) これをtestfile.jsonとか名前を付けてResources/Raw/ に配置 このtestfile.jsonのプロパティを確認してMauiAssetになってればいいけど そうなってなかったらMauiAssetに修正 で、ちょっとびっくりした機能 こちらのページ で紹介されていたのだけど、 jsonファイルの中身をクリップボードにコピーして 「編集」→「形式を選択して貼り付け」→「JSONをクラスとして貼り付ける」 とすると 先頭にusingを入れる useiusing System.Text.Json; using System.Text.Json.Serialization;      public class Rootobject     {         public string count { get; set; }         public Tab

.Net MAUIでJSONを読もう(1/3)

まずは普通のテキストから えるいーだーでは初期設定ファイルをJSONファイルで設定しています なのでこれが読めるようにならないと話にならない Xamarin時代はNewtonsoftの Json.NET を使用していました 開発当時はマイクロソフトのサイトでもお薦めされていたのに、今見たらしれっとSystem.Textを使うように変わっている・・・・ でまあ、とりあえずMAUIで読むにはSystem.Textを使うのが本筋だよねと言うわけでまずはそもそもJSONどころか普通のファイルはどうなのよ と思ったら実験用プロジェクトを作ってリソースどうしようかなあ と見てみたら /Resources/Rawの下にAboutAssets.txtと言う怪しげなファイルを発見 中身はこんな感じ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories). Deployment of the asset to your application is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.     <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" /> These files will be deployed with you package and will be accessible using Essentials:     async Task LoadMauiAsset()     {         using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");         using var reader = new StreamReader(strea

.NET MAUIでスプラッシュスクリーン Android12で地獄を見る

まずは起動するところから・・・・  スプラッシュスクリーンだぬ マイクロソフトのサイト 見てると簡単そう(実際簡単で細かい事を気にしなければsvgファイルを用意して1行だけ書き換えておしまい)   なんかプロジェクトファイルに自動で記述されるらしい よし、プロジェクト作った                     つーか、もうスプラッシュがあるんだけど・・・・ そして自作のsvgファイル くうっ・・・デザインセンスない・・・・   それはともかく、このSVGファイルを Resources\Images にドラッグ&ドラッグ プロジェクトを右クリックして「プロジェクトファイルの編集」 して、編集できるようになったプロジェクトファイルを 自分のプロジェクトファイルに書き換える <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="168,168" /> ↓ <MauiSplashScreen Include="Resources\Splash\ splashtestmaui .svg" Color="#512BD4" BaseSize="168,168" />   とりあえずAndroidで実行 お、おう・・・・ まあ最初はこんなもんよね 最初に紹介したマイクロソフトのサイトでもBaseSizeを書き換えてくださいって言ってるし 言われたとおりに <MauiSplashScreen Include="Resources\Splash\splashtestmaui.svg" Color="#512BD4" BaseSize=" 320,600 " /> 書き換えてみると いい感じじゃーん じゃあアンドロイドのバージョン毎に試してみよう   Android 7 Android 11 Android 12 Android 13

Xamarin.Formsから.NET MAUIへの移植始めます

現在、えるいーだーのスマホアプリは マイクロソフトのXamarin.Formsと言うフレームワークで作成されています で、このXamarin.Formsが 2024/5/1でサポート終了 してしまう  ちょっと早くないっすか? とは思うけど・・・ つーかさ、最初は2021年にリリース予定だったのがいつまでもリリースされないから Xamarinのまま開発を続けちゃったのに、 今になって、サポート終了期間をそんなに短く設定するとかそりゃねーだろとは思う で、まあグダグダと SQLiteまで使って機能追加 もつい先日したわけですが 本来だったらマイクロソフトが「実に使いやすいマイグレーションツール」をリリースしていて えるいーだーは.NET MAUIへの移植はとっくに終わっているはずだった・・・・が、 このマイグレーションツール、まるで役に立たない 何だよこれ フレームワークのバージョン変更すらしてくれないじゃん 一体何処を修正したんだよ・・・・ βのバージョンもまるで上がる気配もない 最初はもうXamarinと一緒に自爆しようと思ったんだけど、他のディーラーさんとの話も進んでいてそれはちょっと迷惑をかけそう なので自力で移植する事にしました なので非常に時間が掛かります この際なので、プログラムの色々気にくわないところを治したいし、 そもそもBLE通信のプロジェクト、 Bluetooth Le Plugin のMAUI対応版がまだβだったりします(まあ、今のバージョンでもMAUI動くみたいだけど) プログラム自体はそう変わらないみたいだけどねぇ・・・・ リリース用の署名とか未だにどうやるのかわからなかったりw 忘れないように、マイグレーションのやる事リスト Xamarin.FormsからMAUIへの以降 Jsonファイルの扱いをNewtonsoft.jsonからSystem.Text.Jsonへ変更 データコントロールクラスの階層変更(色々予想外の変更があったのよ・・・) bleドライバーのさらなる抽象化 変数名の整理整頓 あたりかねぇ マイグレーションツールで移行して落ち着いたらちまちまやろうと思ってたのにさぁ ただ、XamarinとMAUIだとプロジェクト内のファイルのファイル構成すら大分異なってるから結局手作業でやる事になった

デバッグするときは全部の端末をチェックしよう

まいった・・・ デバッグ時にアホな事をやって無駄な時間を潰してしまった とりあえず開発が終わったらメインの端末以外でも軽くチェックするのだけど そこでアホな事をやってしまったのです 数日前にスマホAで動作チェック・・・そのままアプリを落とさず放置 そして今日、デバッグのためにえるいーだーの基板側をスイッチON、端末Bで動作チェック あれぇ・・・・繋がらないなぁ 基板をリセットすると端末Bに繋ぐけど一旦接続するともう受け付けなくなる なんかバグらせたか・・・・ 古いアプリの入ってる端末Cでチェック ・・・・また繋がらない やばい、新しいアプリも、古いアプリも接続がおかしくなっている 基板側は改造していないのにそんなバグ今更出るはず無いのに何でだ・・・・ 基板をシリアル出力しながらログをチェック 端末B・・・・お、今度は繋がった アプリ終了をしてみる ・「切断」がシリアルに出力される  OK ・「再アドバイス」がシリアルに出力される  OK ・「接続」がシリアルに出力される     (´・ω・`)何でや 手元の端末のアプリを終了したのに「 接続 」って ええ??? 端末B、端末Cチェック アプリはちゃんと終了している   犯人は誰だ?   あちこち引っ越し回した結果 数日前にテストして放り出した端末Aがずっと動作したまま、BLEの接続を横からかっ攫っていたのでした ホント疲れた・・・・

巨大化するウォークマン

新宿に買い物行ったついでにヨドバシに寄ったら、新ウォークマンの宣伝がやっていたので触ってきた 触ったけど・・・ ZX-707 は巨大化しすぎだろう・・・・ この前の機種のZX-507を使っていて、後継機が出ると言うから楽しみにしていたのだけど まずいきなり10万オーバーという金額にがっくし 買うの無理だよなぁと思いつつ、けどローンを組んだら・・・とか考えていたのだけど、 金額高いわ、とんでもなく巨大化しているわで考えるのを辞めた A300 シリーズの方がいいのかな とは言えよく考えたら3年も使って無いのだよな とかうだうだ考えていたら、結局は今使っているウォークマンをそのまま使い続けるという結論に達しました  

新機能・・・と言うか必須機能・・・何とかワンフェスまでに・・・

今取りかかっている作業は、えるいーだー の、スマホアプリに前回の動作を保存する機能 本当は前回の スーパーフェスティバル までに出したかったのだけど全然間に合わなかった 未だに作業してるくらいだし ただ、なんとか形になりつつあります つーても今頃そんな機能を実装するのかよと言われそうだけど その機能は アプリ終了時の設定を次回起動時に読み込む機能 と言うかあって当たり前という頭が無かった(酷いw)   一人で作ってるとある程度形になってくると「こんなもんでいいか」ってなっちゃうのよね  で、実際ワンフェスとかAKガーデン、スーパーフェスティバルで出展してみて買ってくれた人、買ってくれなかった人、隣のディーラーの方なんかと話していると 「あれ、結構必須機能が無いな」・・・と 今更ながらちびちびと実装しているわけです このペースならトラブルが無ければワンフェスには間に合いそうです まあ、外部的な要因で作業が停まったりするので確約は出来ないのですけど 後は、 色々設定した物をクリアする機能 トラブってデータベースが壊れてしまったときの対処ですかね  これがまた、設定をクリアするのは別画面が必要なのでちょっと手間がかかるかな データベースが壊れたときはさくっとDBを削除して再起動かな・・・ というか、この機能はマニュアルを動画で公開した方がいいのか説明ページを作っておしまいの方がいいのかこれまたアプリを作って終わりって訳では無いのだよな それにデザイン・・・どうすっかね

Sqliteのカラムの問題

いや・・・・参ったね sqlite-net-pclの便利な機能を使おうと思うと、思ったようにデータを操作できない 自分で思ったようにデータを操作するには結局クエリをきっちり書くしか無い 多分1から設計するときにsqliteを使う事を想定していればよかったのだけど・・・ つーか、.netとSQLServerの組み合わせだとこの辺はかなり柔軟に出来るのだけど そこはsqliteはフットプリントが軽いDBで、 そのライブラリもそこまで面倒見切れないという事なんだろうけど ぬーん・・・・ まあ冗長であってもその環境に合わせたコーディングをしろと言う事なんだろうなぁ スマホにSQLServerをぶち込むわけにはいかないし そういうもんだと割り切ってコーディングするしか無いね