2

この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ライブラリを正常にインポートした人はいますか?

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

4

これをTransforms\Metadata.xmlファイルに追加します

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

2番目のエラーについては、メソッドを実装する部分的なクラス定義を追加できますGetStreamFromNetwork(Java.Net.URI)

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

詳細については、このチュートリアルをお読みください

于 2012-11-13T11:42:38.717 に答える
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();
            }
        }
    }
}
于 2013-05-18T09:59:07.273 に答える