添加ImageLoader时,getInstance(this)中的Android Volley错误

添加ImageLoader时,getInstance(this)中的Android Volley错误,第1张

概述我在 Android开发人员上跟进 image cashing tutorial using Volley,我遇到了请求图像请求并缓存它的问题,我想因为我创建的singelton(从教程中复制). 我的Eclipse在getInstance(this)中给出了错误,因为这是上下文而我正在请求一个图像. ImageRequest request = new ImageRequest( url 我在 Android开发人员上跟进 image cashing tutorial using Volley,我遇到了请求图像请求并缓存它的问题,我想因为我创建的singelton(从教程中复制).

我的Eclipse在getInstance(this)中给出了错误,因为这是上下文而我正在请求一个图像.

ImageRequest request = new ImageRequest(    url,new Response.Listener<Bitmap>() {        @OverrIDe        public voID onResponse(Bitmap bitmap) {            mNetworkImageVIEw = (NetworkImageVIEw) findVIEwByID(R.ID.ImageVIEw);            mImageLoader = MySingleton.getInstance(this).getimageLoader();            mNetworkImageVIEw.setimageUrl(IMAGE_URL,mImageLoader);        //  mImageLoader = MySingleton.getInstance(this).getimageLoader();        //  mImageLoader.get(IMAGE_URL,ImageLoader.getimageListener(mImageVIEw,//      R.drawable.ic_launcher,R.drawable.ic_launcher));            }        },null,new Response.ErrorListener() {        public voID onErrorResponse(VolleyError error) {        //  mImageVIEw.setimageResource(R.drawable.ic_launcher);        }    });MySingleton.getInstance(this).addToRequestQueue(request);

这是单身人士:

package com.example.p;import com.androID.volley.Request;import com.androID.volley.RequestQueue;import com.androID.volley.toolBox.ImageLoader;import com.androID.volley.toolBox.Volley;import androID.content.Context;import androID.graphics.Bitmap;import androID.support.v4.util.LruCache;public class MySingleton {    private static MySingleton mInstance;    private RequestQueue mRequestQueue;    private ImageLoader mImageLoader;    private static Context mCtx;    private MySingleton(Context context) {        mCtx = context;        mRequestQueue = getRequestQueue();        mImageLoader = new ImageLoader(            mRequestQueue,new ImageLoader.ImageCache() {                private final LruCache<String,Bitmap>                    cache = new LruCache<String,Bitmap>(20);                @OverrIDe                public Bitmap getBitmap(String url) {                    return cache.get(url);                }                @OverrIDe                public voID putBitmap(String url,Bitmap bitmap) {                    cache.put(url,bitmap);                }            });    }    public static synchronized MySingleton getInstance(Context context) {        if (mInstance == null) {            mInstance = new MySingleton(context);        }        return mInstance;    }    public RequestQueue getRequestQueue() {        if (mRequestQueue == null) {            // getApplicationContext() is key,it keeps you from leaking the            // Activity or broadcastReceiver if someone passes one in.            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());        }        return mRequestQueue;    }    public <T> voID addToRequestQueue(Request<T> req) {        getRequestQueue().add(req);    }    public ImageLoader getimageLoader() {        return mImageLoader;    }}

我能够以这种方式获取图像并显示它,但我需要缓存它,所以我想将它添加到请求中吗? ..有什么帮助吗?

mNetworkImageVIEw = (NetworkImageVIEw) findVIEwByID(R.ID.ImageVIEw);mImageLoader = MySingleton.getInstance(this).getimageLoader();mNetworkImageVIEw.setimageUrl(IMAGE_URL,mImageLoader);
解决方法 这是我的工作示例代码.希望这个帮助:

MainActivity.java:

import ...public class MainActivity extends Activity {    final Context mContext = this;       @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        NetworkImageVIEw mNetworkImageVIEw = (NetworkImageVIEw) findVIEwByID(R.ID.networkImageVIEw);        String mUrl = "http://192.168.0.100/API/getimage";        mNetworkImageVIEw.setimageUrl(mUrl,VolleySingleton.getInstance(mContext).getimageLoader());           }    ...  }

VolleySingleton.java:

public class VolleySingleton {    private static VolleySingleton mInstance;    private RequestQueue mRequestQueue;    private ImageLoader mImageLoader;    private static Context mContext;    private VolleySingleton(Context context) {        mContext = context;        mRequestQueue = getRequestQueue();        mImageLoader = new ImageLoader(mRequestQueue,new ImageLoader.ImageCache() {                    private final LruCache<String,Bitmap>                            cache = new LruCache<>(20);                    @OverrIDe                    public Bitmap getBitmap(String url) {                        return cache.get(url);                    }                    @OverrIDe                    public voID putBitmap(String url,Bitmap bitmap) {                        cache.put(url,bitmap);                    }                });    }    public static synchronized VolleySingleton getInstance(Context context) {        if (mInstance == null) {            mInstance = new VolleySingleton(context);        }        return mInstance;    }    private RequestQueue getRequestQueue() {        if (mRequestQueue == null) {            // getApplicationContext() is key,it keeps you from leaking the            // Activity or broadcastReceiver if someone passes one in.            mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext(),10 * 1024 * 1024); // this for caching        }        return mRequestQueue;    }    public <T> voID addToRequestQueue(Request<T> req) {        getRequestQueue().add(req);    }    public ImageLoader getimageLoader() {        return mImageLoader;    }   }

activity_main.xml中:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:orIEntation="vertical"    tools:context=".MainActivity">               <com.androID.volley.toolBox.NetworkImageVIEw            androID:ID="@+ID/networkImageVIEw"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content" />       </linearLayout>

AndroIDManifest.xml中:

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"    package="com.example.volleyapp" >    <uses-permission androID:name="androID.permission.INTERNET" />    <application        androID:allowBackup="true"        androID:icon="@mipmap/ic_launcher"        androID:label="@string/app_name"        androID:theme="@style/Apptheme" >        <activity            androID:name=".MainActivity"            androID:label="@string/app_name" >            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>        </activity>            </application></manifest>
总结

以上是内存溢出为你收集整理的添加ImageLoader时,getInstance(this)中的Android Volley错误全部内容,希望文章能够帮你解决添加ImageLoader时,getInstance(this)中的Android Volley错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1138471.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存