Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在Xamarin窗体上实现ImagePicker时出错_C#_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

C# 尝试在Xamarin窗体上实现ImagePicker时出错

C# 尝试在Xamarin窗体上实现ImagePicker时出错,c#,xamarin,xamarin.forms,xamarin.android,C#,Xamarin,Xamarin.forms,Xamarin.android,嗨,我试图在我的xamarin表单上实现ImagePicker,但我的主活动OnActivityResult有问题,每当我选择图像时,它都会收到此错误消息 android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object at Microsoft.Identity.Client.WebUI.SetAuthorizatio

嗨,我试图在我的xamarin表单上实现ImagePicker,但我的主活动OnActivityResult有问题,每当我选择图像时,它都会收到此错误消息

android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
  at Microsoft.Identity.Client.WebUI.SetAuthorizationResult (Microsoft.Identity.Client.Internal.AuthorizationResult authorizationResultInput) [0x00006] in <df3bbcf06538443e9963d82dd707b6fa>:0 
  at Microsoft.Identity.Client.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x00032] in <df3bbcf06538443e9963d82dd707b6fa>:0 
  at KGVC.Droid.MainActivity.OnActivityResult (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x0000b] in <e83f90a066ab4f6c95402217456751e2>:0 
  at Android.Support.V4.App.FragmentActivity.n_OnActivityResult_IILandroid_content_Intent_ (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 requestCode, System.Int32 native_resultCode, System.IntPtr native_data) [0x00014] in <7a2a36256f1648ecbd0c15a75bc5a349>:0 
  at (wrapper dynamic-method) System.Object:409b2b82-0807-4c59-b475-d61eb538da78 (intptr,intptr,int,int,intptr)
    at md5926298ec23f3b6e841a6fb18f139a084.MainActivity.n_onActivityResult(Native Method)
    at md5926298ec23f3b6e841a6fb18f139a084.MainActivity.onActivityResult(MainActivity.java:39)
    at android.app.Activity.dispatchActivityResult(Activity.java:6533)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3919)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3966)
    at android.app.ActivityThread.access$1500(ActivityThread.java:180)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1545)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5795)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:768)
这是我的家属服务

using System;
using System.IO;
using System.Threading.Tasks;

using Android.Content;

using Xamarin.Forms;

using KGVC.Droid;
using KGVC.Interfaces;

[assembly: Dependency(typeof(PicturePickerImplementation))]
namespace KGVC.Droid
{
    public class PicturePickerImplementation : IPicturePicker
    {
        public Task<Stream> GetImageStreamAsync()
        {
            // Define the Intent for getting images
            Intent data = new Intent();
            data.SetType("image/*");
            data.SetAction(Intent.ActionGetContent);

            // Get the MainActivity instance
            MainActivity activity = Forms.Context as MainActivity;

            // Start the picture-picker activity (resumes in MainActivity.cs)
            activity.StartActivityForResult(
                Intent.CreateChooser(data, "Select Picture"),
                MainActivity.PickImageId);

            // Save the TaskCompletionSource object as a MainActivity property
            activity.PickImageTaskCompletionSource = new TaskCompletionSource<Stream>();

            // Return Task object
            return activity.PickImageTaskCompletionSource.Task;
        }
    }
}
有什么解决我问题的建议吗?谢谢 编辑: 经过一点观察,我注意到一些奇怪的行为触发了这个错误。我的错误只有在我成功登录后才会出现,然后我关闭应用程序并从后台将其杀死,要使我的picker图像正常工作,我应该做的是1.使我的应用程序在后台运行2.重新登录,然后我可以再次使用图像picker。有人经历过这个问题吗

我对这个问题的第一个想法是,我的AzureB2c的resultcode已被PicturePickerImplementation中的resultcode替换,这是因为当我尝试删除此代码AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventTargetRequestCode、resultcode、data时;从我的OnActivityResult来看,它将作为魅力发挥作用,我的问题是如何解决这一冲突

在调用PublicClientApplication.AcquireTokenAsync和调用StartActivityForResult时,将触发OnActivityResult。因此,两部分逻辑应根据请求代码分开:

if (requestCode == PickImageId)
    {
        if ((resultCode == Result.Ok) && (data != null))
        {
            Android.Net.Uri uri = data.Data;
            Stream stream = ContentResolver.OpenInputStream(uri);

            // Set the Stream as the completion of the Task
            PickImageTaskCompletionSource.SetResult(stream);
        }
        else
        {
            PickImageTaskCompletionSource.SetResult(null);
        }
    }else
    {
      AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
    }

检查传递给AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs的任何参数是否正确null@smerequestcode=1000,resultcode=Android.App.Result.cancelled,data=null可能是因为数据为null;可能它要求该值为非null。对数据执行空检查,并且仅在数据为非空时调用它,尽管我不确定函数的确切含义doing@sme嗯,正如我所预料的,我在登录后尝试查看参数,当我单击pick图像时,参数与我的完全不同,因此,当使用此依赖项服务时,参数将被替换为我的依赖项服务参数,嗯,你能建议我应该更改代码,这样我就不必更改参数吗?这段代码是我从developer.Xamarin获得的,当我不使用依赖关系服务时,我的paremter是我从microsoft.identity.client/azure b2c requestcode获得的,resultCode=Android.App.Result.Ok,data={intent{act=returnhas extras}
if (requestCode == PickImageId)
    {
        if ((resultCode == Result.Ok) && (data != null))
        {
            Android.Net.Uri uri = data.Data;
            Stream stream = ContentResolver.OpenInputStream(uri);

            // Set the Stream as the completion of the Task
            PickImageTaskCompletionSource.SetResult(stream);
        }
        else
        {
            PickImageTaskCompletionSource.SetResult(null);
        }
    }else
    {
      AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
    }