Android: вызов startActivity () вне контекста действия - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть Textview в моем диалоговом окне оповещения, и я помещаю URL в текст? Когда я использую следующий фрагмент кода, это дает мне ошибку:

                final TextView message = new TextView(context); 
                final SpannableString s = new SpannableString(context.getText(R.string.SEND_SMS));   
                message.setText(s);
                message.setPadding(10, 0, 4, 0);
                message.setGravity(Gravity.AXIS_CLIP);
                message.setMovementMethod(LinkMovementMethod.getInstance());

                new AlertDialog.Builder(MyClass.this)   
                .setTitle("Message 1\nStep 1 of 4")   
                .setView(message)   
                .setPositiveButton(R.string.CONTINUE,new DialogInterface.OnClickListener() {   
                    public void onClick(DialogInterface dialog, int whichButton) {   

                        Log.e("@@","Inside OnClick");
                        //new CheckLoginStatus().execute();
                        sendSMS();
                        myProgressDialog=new ProgressDialog(MyClass.this);
                        myProgressDialog.setTitle("Message 2\nStep 2 of 4");
                        myProgressDialog.setMessage("Message\n" +
                                "Please wait... attempt "+(count));
                        myProgressDialog.setCancelable(false);
                        myProgressDialog.show();

                        Thread splashTread = new Thread() {
                            @Override
                            public void run() {
                                try {
                                    for(int i=0;i<3;i++)
                                    {
                                        if(!smsStatus || !smsSendStatus){
                                            Log.e("@@","Inside Run..");
                                            int waited = 0;
                                            while( (waited < 120000)) {
                                                sleep(100);
                                                waited += 100;
                                            }
                                            Log.e("after","120sec count="+count);
                                            if(!smsStatus)
                                                handler.sendEmptyMessage(0);
                                        }
                                    }
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                                finally
                                {
                                    Log.e("Logs", "Inside stop of thread");
                                    stop();
                                }
                            }
                        };
                        splashTread.start();
                    }   
                })
                .setNegativeButton(R.string.do_later,new DialogInterface.OnClickListener() {   
                    public void onClick(DialogInterface dialog, int whichButton) {   
                        finish();
                    }   
                })
                .setCancelable(false).show();

А код обработчика

 private Handler handler = new Handler() {
    public void handleMessage(Message msg) {
        count += 1;
        if(count<=3){
            try{
                Log.e("@@","Inside handler try count="+count);
                if(myProgressDialog.isShowing())
                    myProgressDialog.dismiss();
            }catch(Exception e){
                e.printStackTrace();
            }
            //new CheckLoginStatus().execute();
            sendSMS();
            if(!myProgressDialog.isShowing()){
                myProgressDialog=new ProgressDialog(MyClass.this);
                myProgressDialog.setTitle("My Message\nStep 2 of 4");
                myProgressDialog.setMessage("Me Message\n" +
                        "Please wait... attempt "+(count));
                myProgressDialog.setCancelable(false);
                myProgressDialog.show();
            }
        }else if(count == 4){
            try{
                Log.e("@@","Inside handler else "+count);
                if(myProgressDialog.isShowing())
                    myProgressDialog.dismiss();
            }catch(Exception e){
                e.printStackTrace();
            }
            count = 1;



            final TextView message = new TextView(getBaseContext()); 
            final SpannableString s = new SpannableString(getBaseContext().getText(R.string.SMS_NOT_RECEIVED));
            Linkify.addLinks(s, Linkify.WEB_URLS);
            message.setText(s);
            message.setPadding(10, 0, 4, 0);
            message.setGravity(Gravity.CLIP_HORIZONTAL);
            message.setMovementMethod(LinkMovementMethod.getInstance());  

            new AlertDialog.Builder(MyClass.this)   
            .setTitle("My Message\nError")   
            .setView(message)
            .setPositiveButton(R.string.OK_TEXT,new DialogInterface.OnClickListener() {   
                public void onClick(DialogInterface dialog, int whichButton) {   
                    finish();
                }   
            }).setCancelable(false).show();
        }
    }
};

Я думаю, что моя проблема заключается в следующем Linkify.addLinks (s, Linkify.WEB_URLS);

Раньше это работало без этого заявления. Пожалуйста, помогите

1 Ответ

2 голосов
/ 30 апреля 2011

Если ваш обработчик находится внутри класса Activity, тогда используйте этот класс в качестве контекста вместо getBaseContext () при создании вашего TextView.

Это будет использовать контекст Activity и ваша проблема исчезнет.

...