C# android NullPointerException:尝试调用虚拟方法-空对象引用
不知道我为什么会出错。让我知道如何修复此错误?我假设,这是一个覆盖问题或安卓流量问题。希望有人能给我指出正确的方向 我得到的全部错误是:C# android NullPointerException:尝试调用虚拟方法-空对象引用,c#,android,C#,Android,不知道我为什么会出错。让我知道如何修复此错误?我假设,这是一个覆盖问题或安卓流量问题。希望有人能给我指出正确的方向 我得到的全部错误是: error Java.Lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at Java.Interop.JniEn
error Java.Lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in <94b04e1756104d1fa1d144932ae2720c>:0
at Android.Runtime.JNIEnv.CallVoidMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x00000] in /Users/builder/azdo/_work/278/s/xamarin-android/src/Mono.Android/Android.Runtime/JNIEnv.g.cs:264
at Com.Theartofdev.Edmodo.Cropper.CropImage+ActivityBuilder.Start (Android.App.Activity p0) [0x00048] in <658bb62a76e541a59bbd18d879a75b72>:0
at Test02_IDWalletCard.Droid.ImageCropperImplementation.ShowFromFile (Test02_IDWalletCard.Library.ImageCropper imageCropper, System.String imageFile) [0x000a1] in C:\Users\ikhla\source\repos\Test02_IDWalletCard\Test02_IDWalletCard\Test02_IDWalletCard.Android\ImageCropperImplementation.cs:42
--- End of managed Java.Lang.NullPointerException stack trace ---
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.<init>(ComponentName.java:130)
at android.content.Intent.setClass(Intent.java:9891)
at com.theartofdev.edmodo.cropper.CropImage$ActivityBuilder.getIntent(CropImage.java:471)
at com.theartofdev.edmodo.cropper.CropImage$ActivityBuilder.getIntent(CropImage.java:463)
at com.theartofdev.edmodo.cropper.CropImage$ActivityBuilder.start(CropImage.java:486)
at mono.java.lang.RunnableImplementor.n_run(Native Method)
at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
这是完整的错误代码。它将进入捕捉区。因此,activityBuilder在ShowFromFile()方法中出现错误:
其他一些信息。这是一个中间类平台。最主要的是运行在活动结果上
namespace Test02_IDWalletCard.Droid
{
public class Platform
{
public static void Init()
{
DependencyService.Register<IImageCropperWrapper, ImageCropperImplementation>();
}
public static async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == CropImage.CropImageActivityRequestCode)
{
CropImage.ActivityResult result = CropImage.GetActivityResult(data);
// small delay
await System.Threading.Tasks.Task.Delay(TimeSpan.FromMilliseconds(100));
if (resultCode == Result.Ok)
{
ImageCropper.Current.Success?.Invoke(result.Uri.Path);
}
else if ((int)resultCode == (int)(CropImage.CropImageActivityResultErrorCode))
{
ImageCropper.Current.Faiure?.Invoke();
}
}
}
}
}
namespace Test02_IDWalletCard.Droid
{
public class ImageCropperImplementation : IImageCropperWrapper
{
public void ShowFromFile(ImageCropper imageCropper, string imageFile)
{
try
{
CropImage.ActivityBuilder activityBuilder = CropImage.Builder(Android.Net.Uri.FromFile(new Java.IO.File(imageFile)));
if (imageCropper.CropShape == ImageCropper.CropShapeType.Oval)
{
activityBuilder.SetCropShape(CropImageView.CropShape.Oval);
}
else
{
activityBuilder.SetCropShape(CropImageView.CropShape.Rectangle);
}
...
activityBuilder.Start(CrossCurrentActivity.Current.Activity);
}
catch (Exception ex)
{
Debug.WriteLine("================================================"+ex.ToString());
}
}
}
}
namespace Test02_IDWalletCard.Droid
{
public class Platform
{
public static void Init()
{
DependencyService.Register<IImageCropperWrapper, ImageCropperImplementation>();
}
public static async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == CropImage.CropImageActivityRequestCode)
{
CropImage.ActivityResult result = CropImage.GetActivityResult(data);
// small delay
await System.Threading.Tasks.Task.Delay(TimeSpan.FromMilliseconds(100));
if (resultCode == Result.Ok)
{
ImageCropper.Current.Success?.Invoke(result.Uri.Path);
}
else if ((int)resultCode == (int)(CropImage.CropImageActivityResultErrorCode))
{
ImageCropper.Current.Faiure?.Invoke();
}
}
}
}
}
[Activity(Label = "Test02_IDWalletCard", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
Platform.Init();
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
Platform.OnActivityResult(requestCode, resultCode, data);
}
}
}