C# 沙马林形式->;System.MissingMethodException:找不到[Interface]的默认构造函数
我在Xamarin.Forms上使用依赖项服务时收到此错误。我已经看到了这个错误的答案,包括iOS和链接器。然而,我在Android上运行这个,链接器关闭了 它告诉我的构造函数在PCL中找不到接口的默认构造函数 我已经搜索和调试了几个小时了。可能导致此错误的原因有哪些?我非常确定我的DependencyService实现是正确的,所以我觉得它有些不同 这是我的相关代码 AndroidC# 沙马林形式->;System.MissingMethodException:找不到[Interface]的默认构造函数,c#,android,xamarin,xamarin.forms,xamarin.android,C#,Android,Xamarin,Xamarin.forms,Xamarin.android,我在Xamarin.Forms上使用依赖项服务时收到此错误。我已经看到了这个错误的答案,包括iOS和链接器。然而,我在Android上运行这个,链接器关闭了 它告诉我的构造函数在PCL中找不到接口的默认构造函数 我已经搜索和调试了几个小时了。可能导致此错误的原因有哪些?我非常确定我的DependencyService实现是正确的,所以我觉得它有些不同 这是我的相关代码 Android [assembly: Xamarin.Forms.Dependency(typeof(TextRecogniti
[assembly: Xamarin.Forms.Dependency(typeof(TextRecognition))]
namespace DiabetesAPP.Droid
{
[Preserve(AllMembers = true)]
[Activity(Label = "TextRecognition", Theme = "@style/Theme.AppCompat.Light.NoActionBar", MainLauncher = true)]
public class TextRecognition : AppCompatActivity, ISurfaceHolderCallback, IProcessor, ITextRecognition
{
private SurfaceView cameraView;
private TextView textView;
private CameraSource cameraSource;
public string Resultados;
private const int RequestCameraPermissionID = 1001;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
cameraView = FindViewById<SurfaceView>(Resource.Id.surface_view);
textView = FindViewById<TextView>(Resource.Id.txtview);
TextRecognizer textRecognizer = new TextRecognizer.Builder(ApplicationContext).Build();
if (!textRecognizer.IsOperational)
{
Log.Error("Main Activity", "Detector dependencies are not yet available");
}
else
{
cameraSource = new CameraSource.Builder(ApplicationContext, textRecognizer)
.SetFacing(CameraFacing.Back)
.SetRequestedFps(2.0f)
.SetRequestedPreviewSize(1280, 1024)
.SetAutoFocusEnabled(true)
.Build();
cameraView.Holder.AddCallback(this);
textRecognizer.SetProcessor(this);
}
Android.Widget.Button logonButton = FindViewById<Android.Widget.Button>(Resource.Id.button_send);
logonButton.Click += LogonButton_Click;
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
switch (requestCode)
{
case RequestCameraPermissionID:
{
if (grantResults[0] == Android.Content.PM.Permission.Granted)
{
cameraSource.Start(cameraView.Holder);
}
}
break;
}
}
public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height)
{
}
public void SurfaceCreated(ISurfaceHolder holder)
{
if (ActivityCompat.CheckSelfPermission(ApplicationContext, Manifest.Permission.Camera) != Android.Content.PM.Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new string[]
{
Android.Manifest.Permission.Camera
}, RequestCameraPermissionID);
return;
}
cameraSource.Start(cameraView.Holder);
}
public void SurfaceDestroyed(ISurfaceHolder holder)
{
cameraSource.Stop();
}
public void ReceiveDetections(Detections detections)
{
SparseArray items = detections.DetectedItems;
if (items.Size() != 0)
{
textView.Post(() =>
{
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < items.Size(); i++)
{
strBuilder.Append(((TextBlock)items.ValueAt(i)).Value);
strBuilder.Append("\n");
}
textView.Text = strBuilder.ToString();
Resultados = strBuilder.ToString();
});
}
}
private void LogonButton_Click(object sender, EventArgs e)
{
//Toast.MakeText(this, "Hello from " + Resultados, ToastLength.Long).Show();
//Intent data = new Intent(this, typeof(TextRecognition));
//SetResult(Result.Ok, data);
//// MessagingCenter.Send((DiabetesAPP.App)Xamarin.Forms.Application.Current, "OpenPage", "You send message:" + Resultados);
//// MessagingCenter.Send<DiabetesAPP.App, string>(DiabetesAPP.App.Current as App, "OpenPage", "You send message:" + Resultados);
//MessagingCenter.Send((DiabetesAPP.App)Xamarin.Forms.Application.Current, "OpenPage", "You send message:" + Resultados);
Toast.MakeText(this, Resultados, ToastLength.Short).Show();
MessagingCenter.Send<App, string>(App.Current as App, "OpenPage", "You send message:" + Resultados);
Finish();
}
public void Release()
{
}
public void LaunchActivityInAndroid()
{
Activity activity = Forms.Context as Activity;
var intent = new Intent(Forms.Context, typeof(TextRecognition));
activity.StartActivity(intent);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
switch (resultCode)
{
case Result.Ok:
break;
}
Finish();
}
public interface ITextRecognition
{
}
//Update code - 16/09/2020
public TextRecognition()
{
}
}
}
[assembly:Xamarin.Forms.Dependency(typeof(TextRecognition))]
名称空间DiabetesAPP.Droid
{
[保留(所有成员=真)]
[活动(Label=“TextRecognition”,Theme=“@style/Theme.AppCompat.Light.NoActionBar”,MainLauncher=true)]
公共类文本识别:AppCompativeActivity、ISurfaceHolderCallback、IProcessor、ITextRecognition
{
私人水面观景摄像师;
私有文本视图文本视图;
私人摄像源摄像源;
公共字符串Resultados;
private const int RequestCameraPermissionID=1001;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
cameraView=findviewbyd(Resource.Id.surface\u视图);
textView=FindViewById(Resource.Id.txtview);
TextRecognizer TextRecognizer=新的TextRecognizer.Builder(ApplicationContext.Build();
如果(!textRecognitor.IsOperational)
{
Log.Error(“主要活动”,“探测器依赖项尚不可用”);
}
其他的
{
cameraSource=新建cameraSource.Builder(ApplicationContext,TextRecognitor)
.SetFacing(摄像机定位。背面)
.SetRequestedFps(2.0f)
.SetRequestedPreviewSize(12801024)
.SetAutoFocusEnabled(真)
.Build();
cameraView.Holder.AddCallback(this);
textRecognizer.SetProcessor(此);
}
Android.Widget.Button logonButton=findviewbyd(Resource.Id.Button\u send);
logonButton.Click+=logonButton\u Click;
}
public override void OnRequestPermissionsResult(int-requestCode,string[]permissions,[GeneratedEnum]Android.Content.PM.Permission[]grantResults)
{
开关(请求代码)
{
案例请求CameraPermissionID:
{
if(grantResults[0]==Android.Content.PM.Permission.grated)
{
cameraSource.Start(cameraView.Holder);
}
}
打破
}
}
public void surfacechange(ISurfaceHolder持有人,[GeneratedEnum]格式,整数宽度,整数高度)
{
}
已处理的公共空隙表面(ISurfaceHolder)
{
if(ActivityCompat.CheckSelfPermission(ApplicationContext,Manifest.Permission.Camera)!=Android.Content.PM.Permission.grated)
{
ActivityCompat.RequestPermissions(此,新字符串[])
{
Android.Manifest.Permission.Camera
},RequestCameraPermissionID);
返回;
}
cameraSource.Start(cameraView.Holder);
}
公共空隙表面置换(ISurfaceHolder)
{
cameraSource.Stop();
}
公共无效接收检测(检测)
{
SparseArray项目=检测。检测项目;
如果(items.Size()!=0)
{
textView.Post(()=>
{
StringBuilder strBuilder=新StringBuilder();
对于(int i=0;i[assembly: Xamarin.Forms.Dependency(typeof(ITextRecognition))]
namespace DiabetesAPP.Views.FoodMenu
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class FoodMenu : ContentPage
{
public FoodMenu()
{
InitializeComponent();
}
async void Food_ManualEntry(object sender, EventArgs e)
{
await Navigation.PushAsync(new SearchFood());
}
public void Food_CameraEntry(object sender, EventArgs e)
{
Xamarin.Forms.DependencyService.Register<ITextRecognition>();
DependencyService.Get<ITextRecognition>().LaunchActivityInAndroid();
}
public interface ITextRecognition
{
void LaunchActivityInAndroid();
}
}
}
namespace App384
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class FoodMenu : ContentPage
{
public FoodMenu()
{
InitializeComponent();
}
public void Food_CameraEntry(object sender, EventArgs e)
{
Xamarin.Forms.DependencyService.Register<ITextRecognition>();
DependencyService.Get<ITextRecognition>().LaunchActivityInAndroid();
}
}
public interface ITextRecognition
{
void LaunchActivityInAndroid();
}
}
[assembly: Xamarin.Forms.Dependency(typeof(TextRecognition))]
namespace App384.Droid
{
[Preserve(AllMembers = true)]
[Activity(Label = "TextRecognition", Theme = "@style/Theme.AppCompat.Light.NoActionBar", MainLauncher = true)]
public class TextRecognition : AppCompatActivity, ITextRecognition
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
public void LaunchActivityInAndroid()
{
Console.WriteLine("LaunchActivityInAndroid");
}
}
}