【问题标题】:Monodroid with Android-Universal-Image-Loader带有 Android-Universal-Image-Loader 的 Monodroid
【发布时间】:2012-11-01 18:49:57
【问题描述】:

我正在尝试将这个 Android 库 (https://github.com/nostra13/Android-Universal-Image-Loader) 添加到我的 monodroid 项目中。 在 Visual Studio 2010 中,我创建了一个 Java 绑定库 项目,并在其中添加了该库的 jar 文件。

问题是,当我构建我的项目时,我遇到了一些错误:

'Com.Nostra13.Universalimageloader.Cache.Memory.Impl.LRULimitedMemoryCache.RemoveNext()': return type must be 'Java.Lang.Object' to match overridden member 'Com.Nostra13.Universalimageloader.Cache.Memory.LimitedMemoryCache.RemoveNext()'

在此构建自动生成的代码上

    static IntPtr id_removeNext;
    [Register ("removeNext", "()Landroid/graphics/Bitmap;", "GetRemoveNextHandler")]
    protected override global::Android.Graphics.Bitmap RemoveNext ()
    {
        if (id_removeNext == IntPtr.Zero)
            id_removeNext = JNIEnv.GetMethodID (class_ref, "removeNext", "()Landroid/graphics/Bitmap;");

        if (GetType () == ThresholdType)
            return Java.Lang.Object.GetObject<global::Android.Graphics.Bitmap> (JNIEnv.CallObjectMethod  (Handle, id_removeNext), JniHandleOwnership.TransferLocalRef);
        else
            return Java.Lang.Object.GetObject<global::Android.Graphics.Bitmap> (JNIEnv.CallNonvirtualObjectMethod  (Handle, ThresholdClass, id_removeNext), JniHandleOwnership.TransferLocalRef);
    }   

还有这个错误

'Com.Nostra13.Universalimageloader.Core.Download.URLConnectionImageDownloader' does not implement inherited abstract member 'Com.Nostra13.Universalimageloader.Core.Download.ImageDownloader.GetStreamFromNetwork(Java.Net.URI)'    

就这行代码

 public partial class URLConnectionImageDownloader : global::Com.Nostra13.Universalimageloader.Core.Download.ImageDownloader

有没有人知道如何解决这个问题? 或者有人在他们的 Monodroid 应用程序中成功导入了这个 java 库吗?

非常感谢任何帮助。 谢谢

【问题讨论】:

    标签: android jar xamarin.android universal-image-loader


    【解决方案1】:

    将此添加到您的 Transforms\Metadata.xml 文件中

    <attr path=”/api/package[@name=’com.nostra13.universalimageloader.cache.memory.impl’]
    /class[@name=’LRULimitedMemoryCache’]
    /method[@name=’removeNext’]” name=”managedReturn”>Java.Lang.Object</attr>
    

    对于第二个错误,您可以添加实现方法GetStreamFromNetwork(Java.Net.URI)的部分类定义

    namespace Com.Nostra13.Universalimageloader.Core.Download {
       partial class URLConnectionImageDownloader{
           public override InputStream GetStreamFromNetwork(Java.Net.URI) {
               return null;
           }
       }
    }
    

    请阅读tutorial了解更多信息

    【讨论】:

    • 好的..谢谢。我不确定在哪里添加秒修复,即部分类的修复
    • 我还在“Metadata.xml”中添加了映射。现在我只收到一个错误 "generator.exe" exited with code -532462766
    • 在Bindings项目中新建一个类文件,添加部分类定义。还可以尝试按照以下步骤将 MSBuild 详细级别提高到正常或更高blogs.msdn.com/b/saraford/archive/2008/10/07/…
    • 试过了。现在我得到未处理的异常: System.Xml.XPath.XPathException: '/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl']/class[@name='FIFOLimitedMemoryCache'/method [@name='removeNext']' 的令牌无效。 (TaskId:39) 你知道哪个令牌无效.. 为什么?
    • “LRULimitedMemoryCache”末尾缺少 ]
    【解决方案2】:

    如果有人正在寻找有效的绑定(从 Universal Image Loader 1.8.4v 开始)。

    Transforms\Metadata.xml:

    <metadata>
      <!-- Binding to universal-image-loader-1.8.4.jar -->
      <!-- We are changing the return types to eliminate errors like 'return type must be 'Java.Lang.Object' to match overridden member' -->
      <attr path="/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl']/class[@name='FIFOLimitedMemoryCache']/method[@name='removeNext']" name="managedReturn">Java.Lang.Object</attr>
      <attr path="/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl']/class[@name='LargestLimitedMemoryCache']/method[@name='removeNext']" name="managedReturn">Java.Lang.Object</attr>
      <attr path="/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl']/class[@name='LRULimitedMemoryCache']/method[@name='removeNext']" name="managedReturn">Java.Lang.Object</attr>
      <attr path="/api/package[@name='com.nostra13.universalimageloader.cache.memory.impl']/class[@name='UsingFreqLimitedMemoryCache']/method[@name='removeNext']" name="managedReturn">Java.Lang.Object</attr>
    </metadata>
    

    还有一组部分类(例如放在 Additions/Fixes.cs 中):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    
    // Fixes to get rid of "does not implement inherited abstract member" errors
    
    namespace Com.Nostra13.Universalimageloader.Cache.Memory.Impl
    {
        partial class FIFOLimitedMemoryCache
        {
            protected override int GetSize(Java.Lang.Object value)
            {
                return GetSize(value);
            }
    
            protected override Java.Lang.Ref.Reference CreateReference(Java.Lang.Object value)
            {
                return CreateReference(value);
            }
        }
    
        partial class LargestLimitedMemoryCache
        {
            protected override int GetSize(Java.Lang.Object value)
            {
                return GetSize(value);
            }
    
            protected override Java.Lang.Ref.Reference CreateReference(Java.Lang.Object value)
            {
                return CreateReference(value);
            }
        }
    
        partial class LRULimitedMemoryCache
        {
            protected override int GetSize(Java.Lang.Object value)
            {
                return GetSize(value);
            }
    
            protected override Java.Lang.Ref.Reference CreateReference(Java.Lang.Object value)
            {
                return CreateReference(value);
            }
        }
    
        partial class UsingFreqLimitedMemoryCache
        {
            protected override int GetSize(Java.Lang.Object value)
            {
                return GetSize(value);
            }
    
            protected override Java.Lang.Ref.Reference CreateReference(Java.Lang.Object value)
            {
                return CreateReference(value);
            }
        }
    
        partial class WeakMemoryCache
        {
            protected override Java.Lang.Ref.Reference CreateReference(Java.Lang.Object value)
            {
                return CreateReference(value);
            }
        }
    
        // Fixing ther error 'Com.Nostra13.Universalimageloader.Cache.Memory.Impl.LruMemoryCache' does not implement interface member 'Com.Nostra13.Universalimageloader.Cache.Memory.IMemoryCacheAware.Keys()'. 'Com.Nostra13.Universalimageloader.Cache.Memory.Impl.LruMemoryCache.Keys()' 
        // cannot implement 'Com.Nostra13.Universalimageloader.Cache.Memory.IMemoryCacheAware.Keys()' because it does not have the matching return type of 'System.Collections.ICollection'. -->
    
        partial class LruMemoryCache
        {
            System.Collections.ICollection Com.Nostra13.Universalimageloader.Cache.Memory.IMemoryCacheAware.Keys()
            {
                return (System.Collections.ICollection)Keys();
            }
        }
    }
    
    namespace Com.Nostra13.Universalimageloader.Core.Assist.Deque
    {
        partial class LinkedBlockingDeque
        {
            partial class DescendingItr
            {
                public override Java.Lang.Object Next()
                {
                    return Next();
                }
            };
    
            partial class Itr
            {
                public override Java.Lang.Object Next()
                {
                    return Next();
                }
            }
        }
    }
    

    【讨论】:

    • 嗨@krzysztofkarolczak 解决错误后如何在xamarin,android中访问此库
    • 嗨,你能告诉我在哪里可以下载用于 ImageLoader 的 armeabi SharedObjects 吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多