2013-09-26 1 views
0

Я создаю приложение, в котором мне нужно загрузить изображения для всех компонентов, таких как кнопки, логотип .. с сервера. Я использую три класса MemoryCache, и файловый кэш ImageLoder класс от fedors Lazylist пример https://github.com/thest1/LazyList/tree/master/src/com/fedorvlasov/lazylist , где мы можем передать URL и Вид на ImageLoader и нагрузки, кэш изображения и т.д.Класс подкласса приложения возвращает исключение нулевого указателя

поэтому я хочу, чтобы инициализировать класс ImageLoder только один раз в все приложение и повторно использовали его в других действиях, чтобы сделать это, я создал для него объект в моем MyGlobalClass, в котором реализовано приложение вроде этого.

public class MyGlobalClass extends Application { 
    private static Context context; 
    private static MyGlobalClass singleton; 
    private static ImageLoader imageLoder = new ImageLoader(getAppContext()); 
    private static String[] urls; 

    public MyGlobalClass getInstance() { 
     return singleton; 
    } 

    public void onCreate() { 
     super.onCreate(); 
     singleton = this; 
     MyGlobalClass .context = getApplicationContext(); 

     urls = getResources().getStringArray(R.array.urls); 
    } 

    public static Context getAppContext() { 
     return MyGlobalClass .context; 
    } 

    public ImageLoader getImageLoader() { 
     return imageLoder; 
    } 

    public String[] getUrls() { 
     return urls; 
    } 
} 

Я создал <appplication> поле в AndroidManifest.xml в

<application 
    android:name="com.xx.yy.MyGlobalClass" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher"> 
</application> 

Но когда я использую его в других видах деятельности, как создание объекта мирового класса, я делаю это:

MyGlobalClass myGClass = (MyGlobalClass)getApplicationContext(); // null pointer here 

Он возвращает исключение с помощью нулевого указателя.

Я хочу, чтобы получить доступ к ImageLoader в HomeActivity так:

ImageButton homeBt = (ImageButton) findViewById(R.id.imageButton2); 
ImageLoader imgLoader=(ImageLoader)myGClass.getImageLoader(); 
String[] urls=myGClass.getUrls(); 
imgLoader.DisplayImage(urls[1], cameraBt); 

Может кто-нибудь увидеть, что случилось с моим кодом и подсказать, как это сделать? Я также создал одноэлементное поле, но не знаю, почему и как его использовать. Просьба привести несколько примеров. Я фактически добавляю вышеприведенную строку исключения в класс активности до onCreate(), поэтому может возникнуть проблема ... но когда я добавляю ее в onCreate() в HomeActivity, она дает мне класс cast Exception..cannot cast to android .app.Application to com.xx.yy.MyGlobalClass

ответ

1

На самом деле создание iem другого тега приложения в файле AndroidManifest.xml неосознанно, факт: --android: name = "com.xx.yy.MyGlobalClass" - должен быть добавлен в тот же тег «приложения», который был создан ранее, если он есть, В ответах на вопросы ClassCastException каждый упомянутый орган должен добавить тег с свойством «android: name» в ManifestFile .. но не укажите там, где .., мне пришлось изучить его, тратя впустую почти половину дня, надеюсь, что это поможет другим людям. Спасибо, syed

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

  • Нет связанных вопросов^_^