.net MAUI演習(REST サービスを利用する)

.net MAUI

目次

.net MAUI

Microsoftのクロスプラットフォームのアプリ開発フレームワーク

スマホアプリもWindowsアプリも1つの共有コードで開発可能らしい

演習 – HttpClient を使用して REST サービスを利用する

演習 – HttpClient を使用して REST サービスを利用する – Training | Microsoft Learn

をやってみた

Azureのサンドボックスをアクティブ化

説明では無料で使用できるようなので、サクッとアクティブ化!

演習に指示されているコマンドをコぺぴしてサンドボックス上で実行

3のコマンド実行したら表示されているURLを忘れずにメモする事!

Web サービスのコードを調べる

Visual Studio 2022を起動してリポジトリのクローンをクリック

演習に記入されているリポジトリのURLをコぺぴ

.NET MAUI クライアント アプリのコードを確認する

Visual Studio 2022を一度閉じます。

エクスプローラーでクローンしたリポジトリのフォルダ「src\client」に移動します

PartsClientソリューションを開きます

演習の指示に従えばよかったのですが、リポジトリした後続行して進めた為、かなり苦労した

サービスにサインインします。

演習の指示に従いPartsManagerのコードを書き換えていきます

大文字小文字を間違えるとエラーとなるので気を付けて!

Deleteボタンクリック時に確認するようにしてみた

Deleteボタンクリックすると即削除されるのが気に入らなかったので、ポップアップで確認画面を表示してからDelete Comandを実行するようにしてみた

//AddPartViewModelのDeletePartにDisplayAlertを追加して確認画面を表示するようにした
//これで合っているのだろうか?MVVMの正解が分からない!

       private async Task DeletePart()
        {
            if (string.IsNullOrWhiteSpace(PartID))
                return;
            bool conifirmation = await             Application.Current.MainPage.DisplayAlert("Question", "削除してもよろしいですか?", "YES", "NO");
            if (conifirmation)
            {
                await PartsManager.Delete(PartID);

                MessagingCenter.Send(this, "refresh");

                await Shell.Current.GoToAsync("..");
            }
        }

トラブルシューティング

エラー XA5301

Javaが見つからない見ないなエラー?

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー XA5301: Failed to generate Java type for class: AndroidX.Core.View.Accessibility.AccessibilityManagerCompat/ITouchExplorationStateChangeListenerImplementor due to MAX_PATH: System.IO.DirectoryNotFoundException: パス 'C:\Users\admintake\source\repos\mslearn-dotnetmaui-consume-rest-services\src\client\PartsClient\PartsClient\obj\Debug\net6.0-android\android\src\mono\androidx\core\view\accessibility\AccessibilityManagerCompat_TouchExplorationStateChangeListenerImplementor.java' の一部が見つかりませんでした。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
場所 Microsoft.Android.Build.Tasks.Files.CopyIfStreamChanged(Stream stream, String destination) 場所 /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/Files.cs:行 170
場所 Xamarin.Android.Tasks.GenerateJavaStubs.CreateJavaSources(IEnumerable`1 javaTypes, TypeDefinitionCache cache) 0

解決方法

  • ソリューションエクスプローラーを右クリック
  • メニューから「ターミナルを開く」をクリック
  • 「.net restore」を実行

APT2126 file not found

Windows モードでは実行可能だが、Androidモードで実行するとパスが長すぎのエラーが発生してしまった。

思い切ってソースをCドライブ直下に移動したところ

APT2126 file not found

が発生し、xml関係のファイルが見つからないとなってしまった

解決方法

エクスプローラーでソリューションのフォルダを開く

PartsClientフォルダ内の「obj」、「bin」フォルダを削除

Visual Studioでビルドを行うと削除したフォルダが再作成される

これでAndroidエミュレーターで実行されるようになった

実行しても一覧に何も表示されない

エミュレーターは起動し、アプリも起動するが一覧に何も表示されない

デバックしていくと401エラーで落ちていた。

よくよく調べてみるとサンドボックスを起動した時のURLのコピー先が間違っていた!

これ使えって書かれているのに気づかず”URL”のアドレスを使ってしまって時間かかった。

コメント

タイトルとURLをコピーしました