MAUI FilePicker Sometimes Returns Null?

243 Views Asked by At

I am writing a simple .NET MAUI application that allows users to open their file dialogue and then choose a file, then the path to the file is displayed and if the user clicks on it, the app should open the file in the default application used to open files of that type for the platform the user is on. But sometimes, the FilePicker seems to returning null even when the file dialogue opens, as I am receiving the error from my catch block

Object reference not set to an instance of an object.

And when trying to open the picked file, I often get an error

An error occurred while attempting to open URL "[filename]": Error Domain=NSCocoaErrorDomain Code=256 "The file “[filename]” couldn’t be opened." UserInfo={NSURL=[full path to file], NSUnderlyingError=0x600002239440 {Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" UserInfo={_LSLine=4101, _LSFunction=_LSOpenStuffCallLocal}}}.

Any idea how I can fix these two issues? Here is my code:

{
    private string selectedFilePath;

    public ObservableCollection<string> SearchResults { get; } = new ObservableCollection<string>();

    public MainPage()
    {
        InitializeComponent();
        BindingContext = this;
    }

    private async void OnSelectFileClicked(object sender, EventArgs e)
    {
        SearchResults.Clear();
        try
        {
            var fileResult = await FilePicker.Default.PickAsync();
            if (fileResult != null)
            {
                selectedFilePath = fileResult.FullPath;
                SearchResults.Add(fileResult.FullPath);
                fileList.ItemsSource = SearchResults;
            }
        }

        catch (Exception ex)
            {
            Console.WriteLine($"Error picking file: {ex.Message}");
        }
    }

    private async void OnFileTapped(object sender, ItemTappedEventArgs e)
    {
        string filePath = e.Item as string;

        await Launcher.OpenAsync(new Uri(filePath));

        }

}
1

There are 1 best solutions below

3
Jessie Zhang -MSFT On

Object reference not set to an instance of an object

If we don't pick any file and come back to our app, the fileResult will be null.

So, before using it, we usually add a judgment statement whether it is null or not.

  var fileResult = await FilePicker.Default.PickAsync();

  // add a null value judgment statement here 
  if (fileResult != null)
   {
            selectedFilePath = fileResult.FullPath;
            SearchResults.Add(fileResult.FullPath);
            fileList.ItemsSource = SearchResults;
    }

In fact, before using any variable, we usually add null value judgment code to prevent exceptions.

Besides, for the second problem, could you please post the steps and the code snippets of reproducing this problem?