【问题标题】:Cannot implicitly convert type 'System.IO.Stream' to 'Java.IO.InputStream'无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”
【发布时间】:2012-04-12 00:18:34
【问题描述】:

我提到了一些关于 SO 的类似问题,但没有一个涉及 IO

当我使用Eclipse 时,我在java 中使用了相同的代码。那个时候成功了。

但是现在我尝试在Mono for Android (C#) 中使用这段代码,它不起作用。

我正在尝试运行此代码来创建InputStream

InputStream myInput =ctx.Assets.Open(DATABASE_NAME + ".db");

但它给了我编译时错误:Cannot implicitly convert type 'System.IO.Stream' to 'Java.IO.InputStream'

有一个将文件从资产复制到设备内存的直接功能,但需要源和目标路径。

如何获取源路径???

由于我是 Mono for Android 的绝对初学者,感谢任何帮助。

【问题讨论】:

  • 看起来你缺少java和Mono代码,你可以使用两者之一,但不能同时使用
  • 那么我该如何移植上面的代码行呢?
  • 您必须将所有 Java 咖啡转换为 Mono。如果你想在 Android 上运行程序,你有什么理由想用 Mono 编写?
  • @Kai Monodroid 允许您使用 C# 编写您的 Android 应用程序并重用现有的 .NET 代码,这是使用该产品的原因之一。
  • @Kai 你假设一个现有的 Java 代码库。 Mono for Android 面向那些没有现有 Java 代码库但他们希望重用的现有 C# 代码库的用户。

标签: c# android xamarin.android java-io .net


【解决方案1】:

您正在尝试将 System.IO.Stream 转换为 Java.IO.InputStream,这是不允许的。两者都是不同的环境。

你想在这里实现的可以使用 System.IO.Stream 来完成,所以不需要转换!!

            System.IO.Stream input = context.Assets.Open(FILENAME);
            Java.IO.FileOutputStream output = new Java.IO.FileOutputStream(file);
            byte[] buffer = new byte[1024];
            int size;
            while ((size = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, size);
            }
            input.Close();
            output.Close();

【讨论】:

    【解决方案2】:

    Mono for Android 将一些 Java 结构转换为“等效”的 .NET 结构,以简化类 .NET 平台之间的代码共享。作为其中的一部分,java.io.InputStreamjava.io.OutputStream 映射到 System.IO.Stream,因此会出现编译器错误。

    您需要InputStream 上存在而System.IO.Stream 上不存在的东西吗?

    有一个将文件从资产复制到设备内存的直接功能,但需要源和目标路径。

    我不知道你在这里指的是什么InputStream 方法。你可以使用Stream.CopyTo(Stream) 来做到这一点:

    Stream asset = context.Assets.Open(DATABASE_NAME + ".db");
    string dbPath = System.IO.Path.Combine(
            System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
            "YourFile.xml");
    using (var dest = System.IO.File.OpenWrite(destPath))
        asset.CopyTo(dest);
    

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多