Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Xamarin.android 从Xamarin Monodroid中的FileInputStream继承_Xamarin.android_Xamarin - Fatal编程技术网

Xamarin.android 从Xamarin Monodroid中的FileInputStream继承

Xamarin.android 从Xamarin Monodroid中的FileInputStream继承,xamarin.android,xamarin,Xamarin.android,Xamarin,我有一个从Java.IO.FileInputStream继承的类。它看起来像这样: public class DeviceInputStream : FileInputStream { private FileDescriptor descriptor = null; private byte currentValue; public DeviceInputStream(FileDescriptor fd) : base(fd) { descri

我有一个从Java.IO.FileInputStream继承的类。它看起来像这样:

public class DeviceInputStream : FileInputStream
{
    private FileDescriptor descriptor = null;
    private byte currentValue;

    public DeviceInputStream(FileDescriptor fd) : base(fd)
    {
        descriptor = fd;
    }

    public DeviceInputStream(File file) : base(file){}

    public DeviceInputStream(string fileName):base(fileName){}

    public override int Read()
    {
        int byteRead = base.Read();
        currentValue = (byte) byteRead;
        return byteRead;
    }

    public byte CurrentValue
    {
        get { return currentValue; }
    }
}
但是,当我编译此文件时,会出现以下错误:

未报告的异常文件NotFoundException;必须被抓住或宣布被抛出 超级(p0); DeviceInputStream.java:20

有没有关于是什么导致了这个问题的想法?谢谢


-Shaun

这似乎是Xamarin Monodroid的一个问题,并已作为一个bug提交,以将ExportAttribute扩展到构造函数。详情如下:

在构建时,会为每个Java.Lang.Object子类生成Android可调用包装器(ACW),其中包括我们的DeviceInputStream类型:

public class DeviceInputStream
extends java.io.FileInputStream
implements
    mono.android.IGCUserPeer
{
static final String __md_methods;
static {
    __md_methods = 
        "n_read:()I:GetReadHandler\n" +
        "";
    mono.android.Runtime.register ("Scratch.ContentProvidersHateApplications.DeviceInputStream, Scratch.ContentProvidersHateApplications, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", DeviceInputStream.class, __md_methods);
}


public DeviceInputStream (java.io.File p0)
{
    super (p0);
    if (getClass () == DeviceInputStream.class)
        mono.android.TypeManager.Activate ("Scratch.ContentProvidersHateApplications.DeviceInputStream, Scratch.ContentProvidersHateApplications, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Java.IO.File, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=c4c4237547e4b6cd", this, new java.lang.Object[] { p0 });
}


public DeviceInputStream (java.io.FileDescriptor p0)
{
    super (p0);
    if (getClass () == DeviceInputStream.class)
        mono.android.TypeManager.Activate ("Scratch.ContentProvidersHateApplications.DeviceInputStream, Scratch.ContentProvidersHateApplications, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Java.IO.FileDescriptor, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=c4c4237547e4b6cd", this, new java.lang.Object[] { p0 });
}


public DeviceInputStream (java.lang.String p0)
{
    super (p0);
    if (getClass () == DeviceInputStream.class)
        mono.android.TypeManager.Activate ("Scratch.ContentProvidersHateApplications.DeviceInputStream, Scratch.ContentProvidersHateApplications, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", this, new java.lang.Object[] { p0 });
}


    public int read ()
    {
        return n_read ();
    }

    private native int n_read ();

/* ... */
}
因为ACW是Java代码,所以它们必须是有效的Java代码。不幸的是,在这种情况下,它们不是,因为DeviceInputStream(String)构造函数中的super(p0)调用是FileInputStream(String),它抛出FileNotFoundException

由于DeviceInputStream(String)构造函数调用的方法可能引发异常,因此DeviceInputStream(String)必须包含一个throws子句,或者在super(p0)语句周围有一个try/catch块。这两种情况都不会发生,因此会出现编译器错误

不幸的是,目前没有解决办法;没有一种方法可以在构造函数主体上向ACW添加抛出,也没有其他方法可以自定义ACW的构造函数,因此您被卡住了-(


扩展ExportAttribute以使其工作的支持已提交到。

听起来像是框架中的一个bug,涉及已检查的异常。请从obj/debug/android/子文件夹发布生成的ACW。您是否尝试过将这些方法包装在try/catch块中?