我正在尝试在我的monodroid项目中添加此Android库(https://github.com/nostra13/Android-Universal-Image-Loader)。 在Visual Studio 2010中,我创建了一个 Java Bindings Library 项目,其中我添加了该库的 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库吗?
非常感谢任何帮助。 感谢
答案 0 :(得分:4)
将其添加到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了解详情
答案 1 :(得分: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();
}
}
}
}