2010-05-19 7 views
0

J'ai une boîte de dialogue personnalisée dans mon application et j'ai un problème pour atteindre le comportement souhaité. Mon dialogue a 4 boutons. (Retour, Valide, Modifier et Restaurer). Lorsque l'utilisateur clique sur Modifier ou Valider, je souhaite appeler une autre activité. Donc j'utilise Intent mais ça plante.Problème avec la boîte de dialogue personnalisée Android

L'erreur Log:

05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): java.lang.NullPointerException 05-19 13: 29: 21,495: ERREUR/DEBUGTAG (974):.
à android.content.ComponentName (ComponentName.java:75) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.content.Intent (intention.. java: 2551) 05-19 13: 29: 21.495: ERROR/DEBUGTAG (974): à com.android.booztermobile.activity.HeaderMailDisplayActivity.onClick (HeaderMailDisplayActivity.java:571) 05-19 13: 29: 21.495: ERREUR/DEBUGTAG (974): au android.view.View.performClick (View.java: 2364) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.view.View.onTouchEvent (View.java:4179) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.widget.TextView.onTouchEvent (TextView.java:6540) 05-19 13: 29: 21.495: ERROR/DEBUGTAG (974): à android.view.View.dispatchTouchEvent (Affichage. java: 3709) 05-19 13: 29: 21.495: ERREUR/DEBUGTAG (974): à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974) : à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884 05-19 13: 29: 21.495: ERREUR/DEBUGTAG (974): à android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21,495: ERREUR/DEBUGTAG (974): à com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent (PhoneWindow.java:1659) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1107) 05- 19 13: 29: 21.495: ERROR/DEBUGTAG (974): à android.app.Dialog.dispatchTouchEvent (Dialog.java:643) 05-19 13: 29: 21.495: ERROR/DEBUGTAG (974): at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:1643) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.view.ViewRoot.handleMessage (ViewRoot.java:1691) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à android.os.Handler.dispatchMessage (Handler.java:99) 05-19 13: 29: 21.495: ERROR/DEBUGTAG (974): à android.os.Looper.loop (Looper.java: 123) 05-19 13:29:21.495: ERROR/DEBUGTAG (974): à android.app.ActivityThread.main (ActivityThread.java:4363) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): à java.lang. reflect.Method.invokeNative (native méthode) 05-19 13: 29: 21.495: ERROR/DEBUGTAG (974): à java.lang.reflect.Method.invoke (Method.java:521) 05-19 13 : 29: 21,495: ERROR/DEBUGTAG (974): à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860) 05-19 13: 29: 21,495: ERROR/DEBUGTAG (974): au com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 05-19 13: 29: 21,495: ERREUR/DEBUGTAG (974): à dalvik.system.NativeStart.main (natif Méthode)

Mon dialogue personnalisé:

package com.android.booztermobile.services; 

import com.android.booztermobile.R; 

import android.app.Dialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Button; 


public class MailDialog extends Dialog { 

    private Button btnValid; 
    private Button btnBack; 
    private Button btnRestore; 
    private Button btnModify; 
    private Context context; 


    public MailDialog(Context cont) { 
     super(cont); 
     context = cont; 
     } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("TestApp", "Dialog created"); 
      setContentView(R.layout.dialog_classement);  

      btnValid = (Button) findViewById(R.id.btnValidClassement); 
      btnBack = (Button) findViewById(R.id.btnBackClassement);  
      btnRestore = (Button) findViewById(R.id.btnRestoreClassement); 
      btnModify = (Button) findViewById(R.id.btnModifyClassement); 

    } 
} 

et l'activité (coupée parce que trop long):

 //create dialog 
public void getMailInformations(View v, Context context){ 

    currentMail = (MailHeader) v.getTag(); 

    dial = new MailDialog(context); 

    dial.setTitle("Classement"); 
    dial.show(); 

    btnValidClassement = (Button) dial.findViewById(R.id.btnValidClassement); 
    btnValidClassement.setOnClickListener(this); 

} 

/** onclick: */

public void onClick(View view) { 

//THIS WORKS (Activity Button) 
    if (view == lblPreviousMails) { 

      positionList -= 20; 
      // create Intent 
      Intent defineIntentDisplayPreviousMails = new Intent(HeaderMailDisplayActivity.this, HeaderMailDisplayActivity.class); 

      //Create bundle to pass informations to the other activity 
      Bundle objetbundle = new Bundle(); 
      objetbundle.putString("positionList", String.valueOf(positionList)); 
      objetbundle.putStringArrayList("currentMails", seqnumList); 
      objetbundle.putString("uidh", uidh); 
      defineIntentDisplayPreviousMails.putExtras(objetbundle); 

      // call headermailDisplayActivity 
      HeaderMailDisplayActivity.this.startActivity(defineIntentDisplayPreviousMails); 

     } 

//THIS DOESN'T WORKS (Dialog Button) 
    if(view == btnValidClassement){ 

    try{ 

    ClassementHandlerCall classement = new    ClassementHandlerCall(); 
     boolean mailClassify = classement.classifyMail(AuthentificationActivity.uidh, 
     String.valueOf(currentMail.getSeqnum()), null, null); 

     dial.dismiss(); 

     if (mailClassify == true){ 

       //create Intent 
       Intent defineIntentClassifyMails = new Intent(MailClassificationActivity.this, HeaderMailDisplayActivity.class); 

       // Object that allows to pass person's uidh and positionList onto HeaderMailDisplayActivity 
       Bundle objetbundle = new Bundle(); 
       objetbundle.putString("uidh",uidh); 
       objetbundle.putString("positionList", String.valueOf(positionList)); 
       defineIntentClassifyMails.putExtras(objetbundle); 

       // call HeaderMailDisplayActivity 
       MailClassificationActivity.this.startActivity(defineIntentClassifyMails); 


     } 

    }catch(Exception e){ 
    // TODO Auto-generated catch block 
    Log.e("DEBUGTAG","Error occured", e); 
    e.printStackTrace(); 
    } 



    } 

} 
+0

s'il vous plaît formater votre code .. merci – hara

+0

oui, j'ai essayé, mais j'ai mis [code] [/ code], et il semble ne fonctionne pas – Nanis

+0

Lisez ceci pour que vous puissiez apprendre à utiliser l'éditeur: http: //stackoverflow.com/editing-help – Cristian

Répondre

0

Selon la pile trace, il ressemble à ce que vous appelez un constructeur intention avec certains paramètres malformés.

+0

Oui mais lequel ?? parce que j'utilise le même constructeur d'intention deux fois. On travaille (quand c'est un bouton d'activité), et d'autres pas (quand c'est un bouton de dialogue) – Nanis

+0

Dans le code, vous avez ajouté, il n'y a qu'un seul constructeur. – Karan

+0

Je n'ai pas ajouté tout le code parce que c'est trop long – Nanis

0

Pour démarrer l'activité de l'intention que vous devez ajouter dans le fichier xml manifeste l'activité avec ce code

<activity android:name=".youractivityname" 
      android:configChanges="keyboardHidden|orientation" 
      android:label="@string/app_name"> 
</activity> 

Mettre le code avant l'application balise fermante dans le manifeste.
Et le code en cas de clic de bouton est:

Intent myIntent = new Intent(v.getContext(), youractivity.class); 
startActivityForResult(myIntent, 1); 
+0

mon activité est déjà déclarée sur le manifeste XML. Et mon intention fonctionne quand ce n'est pas un bouton de dialogue. – Nanis

Questions connexes