加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Singleton模式的Android Volley错误

发布时间:2020-12-15 04:31:16 所属栏目:Java 来源:网络整理
导读:我试图按照 this guide关于如何使用Singleton与Volley一起工作.目标是使用此Singleton将我的RequestQueue放在Application上下文中,这样它就不会受到从landscape到portrait等的影响. 但是我收到以下错误: java.lang.NullPointerException: Attempt to invoke
我试图按照 this guide关于如何使用Singleton与Volley一起工作.目标是使用此Singleton将我的RequestQueue放在Application上下文中,这样它就不会受到从landscape到portrait等的影响.

但是我收到以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method ‘java.io.File android.content.Context.getCacheDir()’ on a null object reference
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:45)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:105)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:115)
at se.ccconsulting.arenaui3.VolleySingleton.(VolleySingleton.java:20)
at se.ccconsulting.arenaui3.VolleySingleton.getInstance(VolleySingleton.java:34)
at se.ccconsulting.arenaui3.AdventureFragment.onCreateView(AdventureFragment.java:62)

它指向这一行:

mRequestQueue = Volley.newRequestQueue(HelperApplication.getAppContext());

我不确定这里有什么问题,因为我在代码中可以看到VolleySingleton.java中的getInstance()方法不应该

VolleySingleton.java

public class VolleySingleton {
    private static VolleySingleton mInstance = null;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;

    private VolleySingleton(){
            mRequestQueue = Volley.newRequestQueue(HelperApplication.getAppContext());
            mImageLoader = new ImageLoader(this.mRequestQueue,new ImageLoader.ImageCache() {
            private final LruCache<String,Bitmap> mCache = new LruCache<String,Bitmap>(10);
            public void putBitmap(String url,Bitmap bitmap) {
                mCache.put(url,bitmap);
            }
            public Bitmap getBitmap(String url) {
                return mCache.get(url);
            }
        });
    }

    public static VolleySingleton getInstance(){
        if(mInstance == null){
            mInstance = new VolleySingleton();
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue(){
        return this.mRequestQueue;
    }

    public ImageLoader getImageLoader(){
        return this.mImageLoader;
    }
}

HelperApplication.java

public class HelperApplication extends Application{
    private static HelperApplication mInstance;
    private static Context mAppContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;

        this.setAppContext(getApplicationContext());
    }

    public static HelperApplication getInstance(){
        return mInstance;
    }
    public static Context getAppContext() {
        return mAppContext;
    }
    public void setAppContext(Context mAppContext) {
        this.mAppContext = mAppContext;
    }
}

这是我在实施Singlton之前从Volley使用的代码行,它完美地工作但不满足我的需求:

RequestQueue queue = Volley.newRequestQueue(getActivity());

我在Genymotion上调试.
Fruthermore,Volley.java中的一行代码在异常中提到:

File cacheDir = new File(context.getCacheDir(),DEFAULT_CACHE_DIR);

我需要帮助才能传递此错误.

解决方法

如果您阅读了代码链接到的 Github repo的自述文件,具体提到,则需要将其添加到清单XML中.

<application android:name="com.company.MyApplication">

</application>

在您的情况下,将com.company.MyApplication更改为xxx.yyy.HelperApplication.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读