Jump to content

Masquage de bouton : Null Pointer


kom

Recommended Posts

Bonjour,

Je suis actuellement en train de développer une application qui permet d'afficher des flyers.

Pour ce faire, j'utilise un ViewFlipper qui permet d'afficher la couverture de chaque flyer. Sous chaque couverture, je souhaite afficher un nombre de boutons variables (de 2 à 3) qui permet d'afficher le flyer pour les particuliers, pour les entreprises ou (peut-être) pour les deux en fonction de l'image affichée.

Du coup, je rempli mon ViewFlipper comme cela :

if (getIntent().getIntExtra("donnee", 0) == 1){
for (int i = 0; i < ListeImages.theme_couv_amiante.length; i++) {
 vf.addView(addImageView(ListeImages.theme_couv_amiante[i]));
 categorie = "amiante";
}
}
ViewNumberButton();

Ma liste utilisée pour remplir mon ViewFlipper se présente ainsi :

public static Integer theme_couv_amiante[] = {
R.drawable.couv_amiante_couvreur,
R.drawable.couv_amiante_electricien,
R.drawable.couv_amiante_carreleur,
R.drawable.couv_amiante_peintre,
R.drawable.couv_amiante_pierre,
R.drawable.couv_amiante_platre,
R.drawable.couv_amiante_charpentier,
R.drawable.couv_amiante_serrurier,
R.drawable.couv_amiante_plombier };

Avec la fonction ViewNumberButton() :

public void ViewNumberButton() {
String name = CurrentViewName();
Button s_button=(Button)findViewById(R.id.s);
Button ce_button=(Button)findViewById(R.id.ce);
Button ats_button=(Button)findViewById(R.id.ats);
String words[] = name.split("_");
String str1 = words[2]; //Egalement essayé avec 1 et 2 au cas ou la chaine commence à 0
String str2 = words[3];

if (str1.equals("amiante"))
{
if(str2.equals("serrurier"))
{
buttonVisibility=2;
}
else
{
buttonVisibility=3;
}
}

Et un peu plus loin dans la fonction, la définition de la visibilité du bouton :

if (buttonVisibility == 1)
{
s_button.setVisibility(View.INVISIBLE);
ats_button.setVisibility(View.INVISIBLE);
ce_button.setVisibility(View.VISIBLE);
}
else if(buttonVisibility == 2)
{
s_button.setVisibility(View.VISIBLE);
ats_button.setVisibility(View.INVISIBLE);
ce_button.setVisibility(View.VISIBLE);
}
else if(buttonVisibility == 3)
{
s_button.setVisibility(View.VISIBLE);
ats_button.setVisibility(View.VISIBLE);
ce_button.setVisibility(View.VISIBLE);
}

Par la suite, le bouton me transferera vers une nouvelle activité qui affichera le flyer choisi dans un nouveau ViewFlipper.

Mais l'application bug lors de son démarrage et le logcat me retourne un null pointer au niveau de mon OnCreate lorsque j'appelle la fonction ViewNumberButton().

Si vous pouviez me renseigner sur la raison de ce null pointer ou si vous avez une idée de méthode alternative pour afficher ces boutons, je suis preneur.

Merci.

Link to comment
Share on other sites

Dans la stacktrace qui s'affiche dans le logcat lors de l'erreur, tu peux retrouver le numéro de la ligne exacte où se produit l'erreur. Tu sauras ainsi plus précisemment où se produit ce NullPointerException

Link to comment
Share on other sites

Justement, le logcat m'indique que l'erreur vient de la ligne "ViewNumberButton();" lorsque j'appelle la fonction après avoir rempli mon FlipViewer. La fonction est pourtant bien définie dans la même activité, et ne prends aucun argument. C'est pourquoi je ne comprends pas que celui ci me renvoie un NullPointerException.

Le logcat :

10-10 11:31:11.612: W/dalvikvm(25788): threadid=1: thread exiting with uncaught exception (group=0x40c2a1f8)
10-10 11:31:11.612: E/AndroidRuntime(25788): FATAL EXCEPTION: main
10-10 11:31:11.612: E/AndroidRuntime(25788): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ctai.irisst/com.ctai.irisst.ImageViewTop}: java.lang.NullPointerException
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread.access$600(ActivityThread.java:127)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.os.Looper.loop(Looper.java:137)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread.main(ActivityThread.java:4507)
10-10 11:31:11.612: E/AndroidRuntime(25788): at java.lang.reflect.Method.invokeNative(Native Method)
10-10 11:31:11.612: E/AndroidRuntime(25788): at java.lang.reflect.Method.invoke(Method.java:511)
10-10 11:31:11.612: E/AndroidRuntime(25788): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
10-10 11:31:11.612: E/AndroidRuntime(25788): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-10 11:31:11.612: E/AndroidRuntime(25788): at dalvik.system.NativeStart.main(Native Method)
10-10 11:31:11.612: E/AndroidRuntime(25788): Caused by: java.lang.NullPointerException
10-10 11:31:11.612: E/AndroidRuntime(25788): at com.ctai.irisst.ImageViewTop.CurrentViewName(ImageViewTop.java:229)
10-10 11:31:11.612: E/AndroidRuntime(25788): at com.ctai.irisst.ImageViewTop.ViewNumberButton(ImageViewTop.java:144)
10-10 11:31:11.612: E/AndroidRuntime(25788): at com.ctai.irisst.ImageViewTop.onCreate(ImageViewTop.java:140)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.Activity.performCreate(Activity.java:4465)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
10-10 11:31:11.612: E/AndroidRuntime(25788): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
10-10 11:31:11.612: E/AndroidRuntime(25788): ... 11 more

Peut-être que cela vient de la façon dont je récupère le nom de la vue affichée, j'utilise la fonction CurrentViewName() que j'appelle dans mon autre fonction ViewNumberButton() :

public String CurrentViewName(){
Integer inte = galery[vf.getDisplayedChild()];
ImageView image = new ImageView(getApplicationContext());
image.setBackgroundResource(inte);
String test = image.getResources().getResourceName(inte);
return test;}

edit : j'ai commenté toutes les lignes de la fonction CurrentViewName() et j'ai essayé de retourner un String manuellement, l'application ne crash plus.

Le problème c'est que je ne vois pas comment corriger cette fonction.

Link to comment
Share on other sites

Cela correspond à la fonction qui essaye de récupérer le nom de l'élément de la liste qui est affiché, par exemple "R.drawable.couv_amiante_electricien", pour pouvoir récupérer "amiante_electricien" qui me permettra de déterminer le nombre de boutons à afficher. Le problème c'est que cette fonction c'est un peu du bricolage, j'ai essayé de faire ce qui me semblait le plus probable pour récupérer le nom, mais la fonction ne fonctionne pas. Je ne sais pas vraiment comment tourner cela.

Link to comment
Share on other sites

Salut,

Si je ne me trompe pas la méthode getDisplayedChild() de ton ViewFlipper te retourne l'index de la vue affichée qui dans ton cas correspond à l 'index de ton tableau theme_couv_amiante[]

Donc tu pourrais simmplement essayer de remplacer ta méthode CurrentViewName() par ceci:

public void ViewNumberButton() {

String name = theme_couv_amiante[vf.getDisplayedChild()];

Button s_button=(Button)findViewById(R.id.s);
Button ce_button=(Button)findViewById(R.id.ce);
Button ats_button=(Button)findViewById(R.id.ats);
String words[] = name.split("_");
String str1 = words[2]; //Egalement essayé avec 1 et 2 au cas ou la chaine commence à 0
String str2 = words[3];
...
...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...