2015-12-10 2 views
3

Я стараюсь следовать this guide о том, как работать с Volley, используя Singleton. Цель состоит в том, чтобы использовать этот Singleton, чтобы иметь свой RequestQueue в контексте приложения, поэтому на него не повлияет переход от пейзажа к портрету и тому подобное.Ошибка Android Volley с использованием шаблона Singleton

Но я получаю следующее сообщение об ошибке:

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 не должен

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; 
    } 
} 

Это строка кода, я использовал от Volley перед реализацией Синглтон, который работал отлично, но не отвечают моим потребностям:

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

I отлаживаем Genymotion. Fruthermore, строка кода из Volley.java упоминалось в исключение:

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

Мне нужна помощь в получении прошел эту ошибку.

ответ

6

Если вы читаете README из Github repo, ссылки на код, в нем конкретно упоминается, вам нужно добавить это в свой манифест XML.

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

</application> 

В вашем случае, изменить com.company.MyApplication к xxx.yyy.HelperApplication, хотя.

+3

Snotty, но правильный, ty –

Смежные вопросы