Проблема с пользовательским диалогом Android - PullRequest
0 голосов
/ 19 мая 2010

У меня есть собственный диалог в моем приложении, и у меня проблема с достижением желаемого поведения. Мой диалог имеет 4 кнопки. (Назад, Действительный, Изменить и Восстановить). Когда пользователь нажимает кнопку «Изменить» или «Действительный», я хотел бы вызвать другое действие. Итак, я использую Intent, но он падает.

Журнал ошибок:

05-19 13: 29: 21.495: ОШИБКА / DEBUGTAG (974): java.lang.NullPointerException 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974):
в android.content.ComponentName. (ComponentName.java:75) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.content.Intent. (Intent.java:2551) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.booztermobile.activity.HeaderMailDisplayActivity.onClick (HeaderMailDisplayActivity.java:571) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.View.performClick (View.java:2364) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.View.onTouchEvent (View.java:4179) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.widget.TextView.onTouchEvent (TextView.java:6540) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.View.dispatchTouchEvent (View.java:3709) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:884) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent (PhoneWindow.java:1659) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1107) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.app.Dialog.dispatchTouchEvent (Dialog.java:643) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:1643) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.view.ViewRoot.handleMessage (ViewRoot.java:1691) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.os.Handler.dispatchMessage (Handler.java:99) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.os.Looper.loop (Looper.java:123) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в android.app.ActivityThread.main (ActivityThread.java:4363) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в java.lang.reflect.Method.invokeNative (Native Метод) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в java.lang.reflect.Method.invoke (Method.java:521) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618) 05-19 13: 29: 21.495: ОШИБКА / ОТЛАДКА (974): в dalvik.system.NativeStart.main (Native Метод)

Мой пользовательский диалог:

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

    }
}

и активность (сокращена из-за слишком длинного):

        //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();
   }



  }

}

Ответы [ 2 ]

0 голосов
/ 19 мая 2010

Согласно трассировке стека, похоже, что вы вызываете конструктор Intent с некоторыми некорректными параметрами.

0 голосов
/ 19 мая 2010

Чтобы начать действие с намерения, вам нужно добавить в файл XML-манифеста действие с этим кодом

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

Поместите код перед тегом закрытия приложения в манифесте.
И код в событии нажатия кнопки:

Intent myIntent = new Intent(v.getContext(), youractivity.class);
startActivityForResult(myIntent, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...