Начните деятельность в блоке try / catch - PullRequest
0 голосов
/ 25 апреля 2011

Я просто хочу знать, как запустить Activity в блоке try / catch, я сделал это

    public void onReceive(Context context, Intent intent) {
            SipAudioCall incomingCall = null;
            try {
                Intent monIntent = new Intent(this,dialog.class);
                startActivity(monIntent);
                SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
                public void onRinging(SipAudioCall call, SipProfile caller) {

Но у меня есть ошибки:

constructor Intent(IncomingCallReceiver, Class<dialog>) is not defined
Method startActivity(Intent) is undefined for the type IncomingCallReceiver

Я хочу показатьalerttdialog, когда есть звонок.Как я могу решить эту проблему?

Большое спасибо.Весь класс:

public class IncomingCallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        SipAudioCall incomingCall = null;
        try {

            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
                @Override
                public void onRinging(SipAudioCall call, SipProfile caller) {
                    try {
                        call.answerCall(30);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };

            SIPCommunicator wtActivity = (SIPCommunicator) context;

            incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
            incomingCall.answerCall(30);
            incomingCall.startAudio();
            incomingCall.setSpeakerMode(true);
            if(incomingCall.isMuted()) {
                incomingCall.toggleMute();
            }

            wtActivity.call = incomingCall;

            wtActivity.updateStatus(incomingCall);

        } catch (Exception e) {
            if (incomingCall != null) {
                incomingCall.close();
            }
        }
    }

}

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

Проблема, с которой вы сталкиваетесь, заключается не в блоке try catch, а в том, что вы начинаете активность в реализации слушателя. Замены

Intent monIntent = new Intent(this,dialog.class);

с

Intent monIntent = new Intent(<Name of this class>.this,dialog.class);

и

 startActivity(monIntent);

с

<Name of this class>.this.startActivity(monIntent);

Под <Name of this class> я имею в виду класс руководителя, где вы пишете свой код.

0 голосов
/ 25 апреля 2011

Как новичок, я хотел бы заявить о своем мнении: - Попробуйте поместить несколько сообщений об ошибках, чтобы выяснить, где происходит ошибка.Также проверьте файл журнала.

Пример try catch: -

try
{
    //some code

    //Toast message on success
    Toast.makeText(this, R.string.msgStatusUpdatedSuccefully, Toast.LENGTH_LONG).show();
}
catch (TwitterException e)
{
    //Toast message on failure 
    Toast.makeText(this, R.string.msgStatusUpdateFailed, Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

Я бы проверил, подходит ли мой импорт для всех API, которые я использую.

Также делает ваш основной публикаДля устранения неопределенной ошибки класс выглядит следующим образом: -

public class StatusActivity extends Activity implements OnClickListener{}
0 голосов
/ 25 апреля 2011

Судя по всему, вы запускаете новый поток из блока try / catch.Это плохая практика, поскольку поток может потерпеть неудачу в случае возникновения исключения.

Вместо этого объявите переменную перед значением и присвойте ей строку, предшествующую оператору catch.

Также присвойте ему, если возникнет исключение, но другое значение.

Затем запустите поток за пределами блока try / catch, основываясь на успешной оценке переменной.

Использование обратных вызовов для перехвата неудачных потоков, а не исключений.

int x = 0;

try
{
   /* Do some logic here */

   x = 1;        // we have success

}
catch(Exception e)
{
   x = -1;      // failure
}

if (x > 0) 
{
   Intent monIntent = new Intent(this,dialog.class);
                    startActivity(monIntent);

   ...
}
...