目次
.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”のアドレスを使ってしまって時間かかった。
コメント