Closed mcanyucel closed 1 month ago
@mcanyucel may you create a simple repo to reproduce this error? I know you posted all the code above, but I'm thinking there might be issues with the csproj. I'm available on Discord if you want to chat further,
Hey! Thanks for the quick response. I created an empty solution and implemented the basics. You can access it over https://github.com/mcanyucel/nalu-sample . This still results in the same error in the debug output on the main page. Thanks for the discord offer, I might drop by if I encounter something more code-breaking :P
[Glide] Load failed for [nalu_navigation_menu.png] with dimensions [-2147483648x-2147483648] [Glide] class com.bumptech.glide.load.engine.GlideException: Failed to load resource [Glide] There were 3 root causes: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(/nalu_navigation_menu.png: open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: /nalu_navigation_menu.png: open failed: ENOENT (No such file or directory) [Glide] Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.os.ParcelFileDescriptor, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class android.content.res.AssetFileDescriptor, LOCAL [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed [Glide] There was 1 root cause: [Glide] java.io.FileNotFoundException(open failed: ENOENT (No such file or directory)) [Glide] call GlideException#logRootCauses(String) for more detail [Glide] Cause (1 of 1): class java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] Root cause (1 of 3) [Glide] java.io.FileNotFoundException: /nalu_navigation_menu.png: open failed: ENOENT (No such file or directory) [Glide] at libcore.io.IoBridge.open(IoBridge.java:574) [Glide] at java.io.FileInputStream.
(FileInputStream.java:160) [Glide] at java.io.FileInputStream. (FileInputStream.java:115) [Glide] at android.content.ContentResolver.openInputStream(ContentResolver.java:1526) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResourceFromUri(StreamLocalUriFetcher.java:74) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.data.StreamLocalUriFetcher.loadResource(StreamLocalUriFetcher.java:13) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) [Glide] at libcore.io.Linux.open(Native Method) [Glide] at libcore.io.ForwardingOs.open(ForwardingOs.java:563) [Glide] at libcore.io.BlockGuardOs.open(BlockGuardOs.java:274) [Glide] at libcore.io.ForwardingOs.open(ForwardingOs.java:563) [Glide] at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8063) [Glide] at libcore.io.IoBridge.open(IoBridge.java:560) [Glide] ... 18 more [Glide] Root cause (2 of 3) [Glide] java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:351) [Glide] at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:230) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1853) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1773) [Glide] at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:20) [Glide] at com.bumptech.glide.load.data.FileDescriptorLocalUriFetcher.loadResource(FileDescriptorLocalUriFetcher.java:12) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Root cause (3 of 3) [Glide] java.io.FileNotFoundException: open failed: ENOENT (No such file or directory) [Glide] at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:351) [Glide] at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:230) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1853) [Glide] at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1773) [Glide] at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:20) [Glide] at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:11) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:416) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailedInternal(SourceGenerator.java:223) [Glide] at com.bumptech.glide.load.engine.SourceGenerator$1.onLoadFailed(SourceGenerator.java:108) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:167) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) [Glide] at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:50) [Glide] at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:95) [Glide] at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:88) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311) [Glide] at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280) [Glide] at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) [Glide] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [Glide] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424) [Glide] at java.lang.Thread.run(Thread.java:1012) [Glide] at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383) [Glide] Load failed for [crc6488302ad6e9e4df1a.ImageLoaderResultCallback@2879d4a] with dimensions [-2147483648x-2147483648] [Glide] class com.bumptech.glide.load.engine.GlideException: Failed to load resource
The device is Tablet M-DPI 10.1in with Android 14 - API34 x86_64 arch and 512 MB ram.
The error Load failed for [nalu_navigation_menu.png] with dimensions [-2147483648x-2147483648]
is interesting; the requested dimension looks like infinite, like the content has not been rendered yet. At first I thought maybe that is the issue but inner exceptions java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
most likely means a file issue.
@mcanyucel as I imagined there was a simple mistake due to a flaw in the README.md
.
You have to install Nalu.Maui.Navigation
directly in your app csproj
otherwise included resources (images) would not be included correctly.
I hope this commit makes things more clear: https://github.com/nalu-development/nalu/commit/0d0db660ab840654f80c48920895db02295e6979
Let me know if I can close this issue. Thanks.
oh. thanks a lot! I will add the Nalu.Maui.Navigation.
Do I need to install Nalu.Maui.Core ?
I have updated the sample project above but the errors still exist. Is there any additional steps to do? I just added using nuget package manager UI.
@mcanyucel import only the navigation package, it should work
Hey @mcanyucel so here's the thing: you're right, there is a problem even including Nalu.Maui.Navigation
.
I'm providing default menu and back images through this msbuild configuration.
Now it appears from logs that Glide
is not able to find the image, and in fact it's not there.
This looks nasty to solve: I have no clue on how to fix this packaging issue - unless this is a MAUI-Android build issue.
As you can see images are embedded in the NuGet package together with targets
file.
I'll try to find a solution, but in the mean time I think the app should work fine despite that error.
You can provide your own images as explained here.
And I also think you can provide null!
on both methods to fallback to standard platform images.
But I suggest you to provide your own images to get around some MAUI bugs - unless they fixed them in one of the latest service releases (I'm using some icon fonts on my production app).
I'll get back to you once this is fixed, but in the mean time you should be good to go.
You're right; supplying your own images works as it should:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
return MauiApp.CreateBuilder()
.UseMauiApp<App>()
.UseNaluNavigation<App>(RegisterNaluNavigation)
.UseMauiCommunityToolkit(options =>
{
options.SetShouldEnableSnackbarOnWindows(true);
})
.UseSkiaSharp(true)
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
fonts.AddFont("materialdesignicons-webfont.ttf", "MaterialDesignIcons");
})
.RegisterServices()
//.RegisterViews()
//.RegisterViewModels()
.RegisterPopups()
.RegisterDebugLogger()
.Build();
}
private static void RegisterNaluNavigation(Nalu.NavigationConfigurator configurator)
{
configurator.AddPage<HomeViewModel, HomePage>();
configurator.AddPage<NewInspectionViewModel, NewInspectionPage>();
configurator.AddPage<BridgeDetailsViewModel, BridgeDetailsPage>();
configurator.AddPage<ImageViewerViewModel, ImageViewerPage>();
configurator.AddPage<NewElementRecordViewModel, NewElementRecordPage>();
configurator.WithMenuImage(ImageSource.FromFile("uniconsbars.png"));
configurator.WithBackImage(ImageSource.FromFile("evaiconsarrowbackoutline.png"));
}
...
}
fyi, passing null!
as argument also works to prevent the Glide error.
configurator.WithMenuImage(ImageSource.FromFile(null!));
configurator.WithBackImage(ImageSource.FromFile(null!));
With the introduction on Nalu 8.0.0 icons are not included in the package by default (means null!
from the previous comment).
See the details in the release notes.
Describe the bug
Thank you for this library. I came across it while trying to find a way to dispose the VM's in a Shell navigation and stumbled upon the infamous github thread.
I am trying to make it work, and I (tried to) implement a very basic use case. In the device log of the android emulator, the following errors keep popping up:
and it keeps going for many many lines.
I read that readme file says:
This is nowhere a breaking issue, but I wonder if there is a way to solve it without supplying the necessary graphics manually.
Steps to reproduce
Just add the library to a MAUI project.
My shell xaml is as follows:
The MAUI program is as follows:
Expected behaviour
No errors in the output window.