2013-09-26 3 views
0

Je crée une application dans laquelle je dois charger les images pour tous les composants tels que les boutons, le logo .. du serveur. J'utilise trois classes MemoryCache, FileCache et classe ImageLoder de Fedors Lazylist exemple https://github.com/thest1/LazyList/tree/master/src/com/fedorvlasov/lazylist où l'on peut passer url et vue ImageLoader et la charge, mettre en cache l'image etc.Classe de sous-classe d'application renvoie une exception de pointeur nul

donc je veux initialiser la classe ImageLoder qu'une seule fois dans l'ensemble de l'application et réutilisé dans d'autres activités afin de le faire, j'ai créé un objet pour cela dans mon MyGlobalClass étendu avec une application comme celle-ci.

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

J'ai créé le terrain <appplication> dans AndroidManifest.xml comme

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

Mais quand je l'utilise dans d'autres activités comme la création d'objet de classe mondiale que je fais ceci:

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

Il retourne une exception de pointeur nul.

Je veux accéder ImageLoader à HomeActivity comme ceci:

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

Quelqu'un peut-il voir ce qui ne va pas avec mon code et suggérer comment le faire? J'ai également créé un champ singleton mais je ne sais pas pourquoi et comment l'utiliser. S'il vous plaît fournir quelques exemples. Je suis en train d'ajouter la ligne d'exception ci-dessus dans la classe d'activité avant onCreate(), donc peut-être que c'est le problème..mais quand je l'ajoute dans onCreate() dans HomeActivity il me donne une distribution exception. .app.Application à com.xx.yy.MyGlobalClass

Répondre

1

En fait, je crée une autre balise "application" dans le fichier AndroidManifest.xml sans le savoir, le fait est --android: name = "com.xx.yy.MyGlobalClass" Dans Réponses aux questions ClassCastException, chaque corps mentionné doit être ajouté à la propriété "android: name" dans le fichier ManifestFile ... mais n'a pas été ajouté à la balise "application" que vous avez créée précédemment. préciser où .., je devais l'apprendre le hardway gaspillage presque la moitié de la journée, espérons que cela aide à d'autres .. Merci syed