Android Xamarin Visual Studio 2017 Java.Lang.ClassNotFoundException:没有';“找不到类”;条形码碎片活动“;

Android Xamarin Visual Studio 2017 Java.Lang.ClassNotFoundException:没有';“找不到类”;条形码碎片活动“;,android,visual-studio,xamarin.android,Android,Visual Studio,Xamarin.android,我试图从一个片段实例化一个新的活动。我不断地遇到同样的错误 Java.Lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/data/app/StockApp.StockApp-1/base.apk]、NativeLibraryDirectory=[/data/app/StockApp.StockApp-1/lib/arm、/system/fake libs、/data/app/StockApp.StockApp-1/base.apk!/lib/

我试图从一个片段实例化一个新的活动。我不断地遇到同样的错误

Java.Lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/data/app/StockApp.StockApp-1/base.apk]、NativeLibraryDirectory=[/data/app/StockApp.StockApp-1/lib/arm、/system/fake libs、/data/app/StockApp.StockApp-1/base.apk!/lib/arm/armeabi-v7a、/system/lib、/vendor/lib]上未找到类“BarcodeFragmentActivity”

我使用的是Visual Studio 2017版本15.3.3。 我到处寻找这个问题的答案,但不管我怎么努力,我还是会得到同样的错误。当我尝试添加

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
我的条形码碎片活动代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Content.PM;

using Android.Gms.Vision.Barcodes;
using Android.Gms.Common.Apis;
using Android.Gms.Common;
using Android.Gms.Vision;

using Android.Hardware;

using Android.Support.V4.View;
using Android.Support.V4.App;
using Android.Support.V7.App;
using Android.Support.Design.Widget;

using StockApp.UI;
using StockApp.BarcodeReader;


namespace StockApp
{
    class BarcodeFragmentActivity : AppCompatActivity
    {
    private static string tag = "Barcode-Reader";
    private static int RC_HANDLE_GMS = 9001;
    private static int RC_HANDLE_CAMERA_PERM = 2;

    public static string AutoFocus = "AutoFocus";
    public static string UseFlash = "UseFlash";
    public static string BarcodeObject = "Barcode";


    private CameraSourcePreview<BarcodeGraphic> mPreview;
    private Android.Gms.Vision.CameraSource mCameraSource;
    private GraphicOverlay<BarcodeGraphic> mGraphicOverlay;

    private ScaleGestureDetector scaleGestureDetector;
    private GestureDetector getsureDetector;

    private View layout;
    private static BarcodeFragmentActivity thisInstance;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        thisInstance = this;
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Barcode_Capture);

        mPreview = (CameraSourcePreview<BarcodeGraphic>)FindViewById(Resource.Id.preview);
        mGraphicOverlay = (GraphicOverlay<BarcodeGraphic>)FindViewById(Resource.Id.graphicOverlay);

        bool autoFocus = Intent.GetBooleanExtra(AutoFocus, false);
        bool useFlash = Intent.GetBooleanExtra(UseFlash, false);

        int rc = (int) ActivityCompat.CheckSelfPermission(this, Manifest.Permission.Camera);
        if (rc == (int) Permission.Granted)
        {
            createCameraSource(autoFocus, useFlash);
        }
        else
        {
            requestCameraPermission(); 
        }

        getsureDetector = new GestureDetector(this, new CaptureGestureListener());
    }

    private void requestCameraPermission()
    {
        string[] permissions = new string[] { Manifest.Permission.CallPhone };
        if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.Camera))
        {

            Snackbar.Make(layout, "Require Camera Permions To Read Barcodes", Snackbar.LengthIndefinite)
                .SetAction("Ok", new Action<View> (delegate(View obj)
                {
                    ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
                }
                    )).Show();
        }
        else
        {
            ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
        }

        //Activity thisActivity = this;
        //View.IOnClickListener listener = new View.IOnClickListener;

    }

    public override bool OnTouchEvent(MotionEvent e)
    {
        bool b = scaleGestureDetector.OnTouchEvent(e);
        bool c = getsureDetector.OnTouchEvent(e);
        return b || c || base.OnTouchEvent(e);
    }

    private void createCameraSource(bool autoFocus, bool useFlash)
    {
        Context context = ApplicationContext;

        BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).Build();
        BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay);
        barcodeDetector.SetProcessor(
            new MultiProcessor.Builder(barcodeFactory).Build());

        if (!barcodeDetector.IsOperational)
        {
            IntentFilter lowstorageFilter = new IntentFilter(Intent.ActionDeviceStorageLow);
            bool hasLowStorage = RegisterReceiver(null, lowstorageFilter) != null;

            if (hasLowStorage)
            {
                Toast.MakeText(this, "Low Storage Error", ToastLength.Long);
            }
        }

        Android.Gms.Vision.CameraSource.Builder builder = new Android.Gms.Vision.CameraSource.Builder(base.ApplicationContext, barcodeDetector)
            .SetFacing(Android.Gms.Vision.CameraFacing.Back)
            .SetRequestedPreviewSize(1600, 1024)
            .SetRequestedFps(15.0f)
            .SetAutoFocusEnabled(true);

        mCameraSource = builder.Build();




    }

    private void startCameraSource()
    {
        int code = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(ApplicationContext);

        if(code != ConnectionResult.Success)
        {
            Dialog dig = GoogleApiAvailability.Instance.GetErrorDialog(this, code, RC_HANDLE_GMS);
            dig.Show();
        }

        if (mCameraSource != null)
        {
            try
            {
                mPreview.start(mCameraSource, mGraphicOverlay);
            }
            catch (InvalidOperationException)
            {
                mCameraSource.Release();
                mCameraSource = null;
            }
        }
    }

    private bool OnTap(float rawX, float rawY)
    {
        int[] location = new int[2];
        mGraphicOverlay.GetLocationOnScreen(location);
        float x = (rawX - location[0]);
        float y = (rawY - location[1]);

        Barcode best = null;
        float bestDistance = float.MaxValue;

        foreach (BarcodeGraphic graphic in mGraphicOverlay.getGraphics())
        {
            Barcode barcode = graphic.GetBarcode();

            if(barcode.BoundingBox.Contains((int)x,(int)y))
            {
                best = barcode;
                break;
            }

            float dx = x - barcode.BoundingBox.CenterX();
            float dy = y - barcode.BoundingBox.CenterY();

            float distance = (dx * dx) + (dy * dy);

            if ( distance > bestDistance)
            {
                best = barcode;
                bestDistance = distance;
            }

            if (best != null)
            {
                Intent data = new Intent();
                data.PutExtra(BarcodeObject, best);
                SetResult(CommonStatusCodes.Success, data);
                Finish();
                return true;
            }

        }
        return false;

    }

    protected override void OnResume()
    {
        base.OnResume();
        startCameraSource();
    }

    protected override void OnPause()
    {
        base.OnPause();
        if (mPreview != null)
        {
            mPreview.stop();
        }
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        if(mPreview != null)
        {
            mPreview.release();
        }
    }

    private class CaptureGestureListener : GestureDetector.SimpleOnGestureListener
    {
        public override bool OnSingleTapConfirmed(MotionEvent e)
        {
            return thisInstance.OnTap(e.RawX, e.RawY) || base.OnSingleTapConfirmed(e);
        }
    }

    private class ScaleListener : ScaleGestureDetector.IOnScaleGestureListener
    {
        public IntPtr Handle => throw new NotImplementedException();

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public bool OnScale(ScaleGestureDetector detector)
        {
            return false;
        }

        public bool OnScaleBegin(ScaleGestureDetector detector)
        {
            return true;
        }

        public void OnScaleEnd(ScaleGestureDetector detector)
        {
        }
    }

  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用安卓系统;
使用Android.App;
使用Android.Content;
使用Android.OS;
使用Android.Runtime;
使用Android.Views;
使用Android.Widget;
使用Android.Content.PM;
使用Android.Gms.Vision.barcode;
使用Android.Gms.Common.api;
使用Android.Gms.Common;
使用Android.Gms.Vision;
使用Android.Hardware;
使用Android.Support.V4.View;
使用Android.Support.V4.App;
使用Android.Support.V7.App;
使用Android.Support.Design.Widget;
使用StockApp.UI;
使用StockApp.BarcodeReader;
名称空间StockApp
{
类BarcodeFragmentActivity:AppCompatActivity
{
专用静态字符串标记=“条形码阅读器”;
专用静态输入RC_HANDLE_GMS=9001;
专用静态int RC_HANDLE_CAMERA_PERM=2;
公共静态字符串AutoFocus=“AutoFocus”;
公共静态字符串UseFlash=“UseFlash”;
公共静态字符串BarcodeObject=“Barcode”;
私人摄像师资源审查;
私有Android.Gms.Vision.CameraSource;
私有图形覆盖和覆盖层;
私人scalegestruedetector scalegestruedetector;
私人手势检测器;
私家景观布局;
私有静态条码碎片活动thisInstance;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
thisInstance=这个;
base.OnCreate(savedInstanceState);
SetContentView(资源.布局.条形码捕获);
mPreview=(CameraSourcePreview)findviewbyd(Resource.Id.preview);
mGraphicOverlay=(GraphicOverlay)FindViewById(Resource.Id.GraphicOverlay);
bool autoFocus=Intent.GetBooleanExtra(autoFocus,false);
bool useFlash=Intent.GetBooleanExtra(useFlash,false);
int rc=(int)ActivityCompat.CheckSelfPermission(这是Manifest.Permission.Camera);
if(rc==(int)权限。已授予)
{
createCameraSource(自动对焦,使用Flash);
}
其他的
{
requestCameraPermission();
}
getsureDetector=new GestureDetector(这是new CaptureGestureListener());
}
私有void requestCameraPermission()
{
字符串[]权限=新字符串[]{Manifest.Permission.CallPhone};
if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.Permission.Camera))
{
Snackbar.Make(布局,“需要摄像头许可才能读取条形码”,Snackbar.LengthIndefinite)
.SetAction(“确定”,新操作(代理(视图obj)
{
ActivityCompat.RequestPermissions(此、权限、RC\u HANDLE\u CAMERA\u PERM);
}
)).Show();
}
其他的
{
ActivityCompat.RequestPermissions(此、权限、RC\u HANDLE\u CAMERA\u PERM);
}
//活动thisActivity=this;
//View.IOnClickListener=新建View.IOnClickListener;
}
公共覆盖bool ONTOUCHENT(运动事件e)
{
bool b=scalegestruedetector.OnTouchEvent(e);
bool c=getsureDetector.OnTouchEvent(e);
返回b | | c | base.OnTouchEvent(e);
}
专用void createCameraSource(布尔自动对焦、布尔使用闪存)
{
上下文=应用上下文;
BarcodeDetector BarcodeDetector=新的BarcodeDetector.Builder(context.Build();
BarcodeTrackerFactory barcodeFactory=新的BarcodeTrackerFactory(MGRAPHOCOVERLAY);
条形码检测器.SetProcessor(
新的MultiProcessor.Builder(barcodeFactory.Build());
if(!条形码检测器.等操作)
{
IntentFilter lowstorageFilter=新的IntentFilter(Intent.actionDeviceStorage Low);
bool hasLowStorage=RegisterReceiver(null,lowstorageFilter)!=null;
if(hasLowStorage)
{
MakeText(这是“低存储错误”,ToastLength.Long);
}
}
Android.Gms.Vision.CameraSource.Builder=新的Android.Gms.Vision.CameraSource.Builder(base.ApplicationContext,条形码检测器)
.SetFacing(Android.Gms.Vision.CameraFacing.Back)
.SetRequestedPreviewSize(1600,1024)
.SetRequestedFps(15.0f)
.SetAutoFocusEnabled(真);
mCameraSource=builder.Build();
}
私有void startCameraSource()
{
int code=GoogleAppAvailability.Instance.IsGooglePlayServicesAvailable(ApplicationContext);
if(代码!=ConnectionResult.Success)
{
Dialog dig=GoogleApiAvailability.Instance.GetErrorDialog(这个,代码,RC\u HANDLE\u GMS);
dig.Show();
}
if(mCameraSource!=null)
{
尝试
{
mPreview.start(mCameraSource、mgraphcoverlay);
}
捕获(无效操作异常)
{
mCameraSource.Release();
mCameraSource=null;
}
}
}
私有布尔OnTap(浮动rawX,浮动rawY)
{
int[]位置=新int[2];
mGraphicOverlay.GetLocationOnScreen(位置);
浮点x=(rawX-位置[0]);
浮动y=(原始-定位)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

using Android.Gms.Vision.Barcodes;
using Android.Gms.Common.Apis;

using Android.Support.V4.View;
using Android.Support.V4.App;
using Android.Support.V7.App;

namespace StockApp
{
    class BarcodeFragment : Android.Support.V4.App.Fragment, View.IOnClickListener
    {
        private CompoundButton autoFocus { get; set; }
        private CompoundButton useFlash { get; set; }
        private Button btnReadBarcode { get; set; }

        private TextView statusMessage { get; set; }
        private TextView barcodeValue { get; set; }

        private static int RC_BARCODE_CAPTURE = 9001;
        private static string TAG = "BarcodeMain";

        public BarcodeFragment() { }

        public void OnClick(View v)
        {
            if (v.Id == Resource.Id.read_barcode)
            {

                Intent intent = new         Intent(Context.ApplicationContext,Activity.ClassLoader.LoadClass("barcodeFragmentActivity"));//("StockApp.StockApp", typeof(BarcodeFragmentActivity));
            //intent.SetClassName("StockApp.StockApp", );
            intent.PutExtra("AutoFocus", autoFocus.Checked);
            intent.PutExtra("UseFlash", useFlash.Checked);

            if (intent.ResolveActivity(Activity.PackageManager) != null)
            {
                StartActivityForResult(intent, RC_BARCODE_CAPTURE);
            }

        }
    }

    public override void OnActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == RC_BARCODE_CAPTURE)
        {
            if(resultCode == CommonStatusCodes.Success)
            {
                if(data != null)
                {
                  //  Barcode barcode = data.GetParcelableExtra(BarcodeFragmentActivity.BarcodeObject);
                }
            }
        }
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.Fragment_BarcodeMain, container, false);
        statusMessage = view.FindViewById(Resource.Id.txtBarcodeStatus) as TextView;
        barcodeValue = view.FindViewById(Resource.Id.txtBarcodeValue) as TextView;

        autoFocus = view.FindViewById(Resource.Id.auto_focus) as CompoundButton;
        useFlash = view.FindViewById(Resource.Id.use_flash) as CompoundButton;

        view.FindViewById(Resource.Id.read_barcode).SetOnClickListener(this);
        btnReadBarcode = view.FindViewById(Resource.Id.read_barcode) as Button;



        return view;
    }

    public static BarcodeFragment newInstance()
    {
        BarcodeFragment fragment = new BarcodeFragment();
        Bundle args = new Bundle();

        fragment.Arguments = args;
        return fragment;
    }
}
}    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Content.PM;

using Android.Gms.Vision.Barcodes;
using Android.Gms.Common.Apis;
using Android.Gms.Common;
using Android.Gms.Vision;

using Android.Hardware;

using Android.Support.V4.View;
using Android.Support.V4.App;
using Android.Support.V7.App;
using Android.Support.Design.Widget;

using StockApp.UI;
using StockApp.BarcodeReader;


namespace StockApp
{
    class BarcodeFragmentActivity : AppCompatActivity
    {
    private static string tag = "Barcode-Reader";
    private static int RC_HANDLE_GMS = 9001;
    private static int RC_HANDLE_CAMERA_PERM = 2;

    public static string AutoFocus = "AutoFocus";
    public static string UseFlash = "UseFlash";
    public static string BarcodeObject = "Barcode";


    private CameraSourcePreview<BarcodeGraphic> mPreview;
    private Android.Gms.Vision.CameraSource mCameraSource;
    private GraphicOverlay<BarcodeGraphic> mGraphicOverlay;

    private ScaleGestureDetector scaleGestureDetector;
    private GestureDetector getsureDetector;

    private View layout;
    private static BarcodeFragmentActivity thisInstance;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        thisInstance = this;
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Barcode_Capture);

        mPreview = (CameraSourcePreview<BarcodeGraphic>)FindViewById(Resource.Id.preview);
        mGraphicOverlay = (GraphicOverlay<BarcodeGraphic>)FindViewById(Resource.Id.graphicOverlay);

        bool autoFocus = Intent.GetBooleanExtra(AutoFocus, false);
        bool useFlash = Intent.GetBooleanExtra(UseFlash, false);

        int rc = (int) ActivityCompat.CheckSelfPermission(this, Manifest.Permission.Camera);
        if (rc == (int) Permission.Granted)
        {
            createCameraSource(autoFocus, useFlash);
        }
        else
        {
            requestCameraPermission(); 
        }

        getsureDetector = new GestureDetector(this, new CaptureGestureListener());
    }

    private void requestCameraPermission()
    {
        string[] permissions = new string[] { Manifest.Permission.CallPhone };
        if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.Camera))
        {

            Snackbar.Make(layout, "Require Camera Permions To Read Barcodes", Snackbar.LengthIndefinite)
                .SetAction("Ok", new Action<View> (delegate(View obj)
                {
                    ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
                }
                    )).Show();
        }
        else
        {
            ActivityCompat.RequestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
        }

        //Activity thisActivity = this;
        //View.IOnClickListener listener = new View.IOnClickListener;

    }

    public override bool OnTouchEvent(MotionEvent e)
    {
        bool b = scaleGestureDetector.OnTouchEvent(e);
        bool c = getsureDetector.OnTouchEvent(e);
        return b || c || base.OnTouchEvent(e);
    }

    private void createCameraSource(bool autoFocus, bool useFlash)
    {
        Context context = ApplicationContext;

        BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).Build();
        BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay);
        barcodeDetector.SetProcessor(
            new MultiProcessor.Builder(barcodeFactory).Build());

        if (!barcodeDetector.IsOperational)
        {
            IntentFilter lowstorageFilter = new IntentFilter(Intent.ActionDeviceStorageLow);
            bool hasLowStorage = RegisterReceiver(null, lowstorageFilter) != null;

            if (hasLowStorage)
            {
                Toast.MakeText(this, "Low Storage Error", ToastLength.Long);
            }
        }

        Android.Gms.Vision.CameraSource.Builder builder = new Android.Gms.Vision.CameraSource.Builder(base.ApplicationContext, barcodeDetector)
            .SetFacing(Android.Gms.Vision.CameraFacing.Back)
            .SetRequestedPreviewSize(1600, 1024)
            .SetRequestedFps(15.0f)
            .SetAutoFocusEnabled(true);

        mCameraSource = builder.Build();




    }

    private void startCameraSource()
    {
        int code = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(ApplicationContext);

        if(code != ConnectionResult.Success)
        {
            Dialog dig = GoogleApiAvailability.Instance.GetErrorDialog(this, code, RC_HANDLE_GMS);
            dig.Show();
        }

        if (mCameraSource != null)
        {
            try
            {
                mPreview.start(mCameraSource, mGraphicOverlay);
            }
            catch (InvalidOperationException)
            {
                mCameraSource.Release();
                mCameraSource = null;
            }
        }
    }

    private bool OnTap(float rawX, float rawY)
    {
        int[] location = new int[2];
        mGraphicOverlay.GetLocationOnScreen(location);
        float x = (rawX - location[0]);
        float y = (rawY - location[1]);

        Barcode best = null;
        float bestDistance = float.MaxValue;

        foreach (BarcodeGraphic graphic in mGraphicOverlay.getGraphics())
        {
            Barcode barcode = graphic.GetBarcode();

            if(barcode.BoundingBox.Contains((int)x,(int)y))
            {
                best = barcode;
                break;
            }

            float dx = x - barcode.BoundingBox.CenterX();
            float dy = y - barcode.BoundingBox.CenterY();

            float distance = (dx * dx) + (dy * dy);

            if ( distance > bestDistance)
            {
                best = barcode;
                bestDistance = distance;
            }

            if (best != null)
            {
                Intent data = new Intent();
                data.PutExtra(BarcodeObject, best);
                SetResult(CommonStatusCodes.Success, data);
                Finish();
                return true;
            }

        }
        return false;

    }

    protected override void OnResume()
    {
        base.OnResume();
        startCameraSource();
    }

    protected override void OnPause()
    {
        base.OnPause();
        if (mPreview != null)
        {
            mPreview.stop();
        }
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        if(mPreview != null)
        {
            mPreview.release();
        }
    }

    private class CaptureGestureListener : GestureDetector.SimpleOnGestureListener
    {
        public override bool OnSingleTapConfirmed(MotionEvent e)
        {
            return thisInstance.OnTap(e.RawX, e.RawY) || base.OnSingleTapConfirmed(e);
        }
    }

    private class ScaleListener : ScaleGestureDetector.IOnScaleGestureListener
    {
        public IntPtr Handle => throw new NotImplementedException();

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public bool OnScale(ScaleGestureDetector detector)
        {
            return false;
        }

        public bool OnScaleBegin(ScaleGestureDetector detector)
        {
            return true;
        }

        public void OnScaleEnd(ScaleGestureDetector detector)
        {
        }
    }

  }
}
Activity.ClassLoader.LoadClass("barcodeFragmentActivity")//("StockApp.StockApp", typeof(BarcodeFragmentActivity));
Intent intent = new Intent(Context.ApplicationContext, Activity.ClassLoader.LoadClass("barcodeFragmentActivity"));
Intent intent = new Intent(Context.ApplicationContext, typeof(BarcodeFragmentActivity));