Начните действие в блоке try / catch

#android #android-activity #dialog

#Android #android-активность #диалог

Вопрос:

Я просто хочу знать, как запустить действие в блоке 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
  

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

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

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

}
  

Комментарии:

1. Какие ошибки у вас есть? Почему вы пытаетесь начать с блока try / catch?

2. Пожалуйста, укажите, какие конкретные ошибки вы видите, и, возможно, мы могли бы вам помочь.

3. @Роберт @Майра @Джонатан Энгельсма: пожалуйста, посмотрите мой отредактированный первый пост.

Ответ №1:

Проблема, с которой вы сталкиваетесь, заключается не в 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> я имею в виду головной класс, в котором вы пишете свой код.

Комментарии:

1. У меня точно такая же проблема.

Ответ №2:

Судя по всему, вы запускаете новый поток из блока 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);

   ...
}
  

Комментарии:

1. И как это сделать , если я хочу начать какое — то действие ?

2. Не видя всего вашего кода, я не могу быть уверен. Вставьте весь класс целиком.

3. Что это за тип dialog.class ?

4. Вам не хватает конструктора? У вас действительно есть созданный в другом месте метод под названием startActivity() ?

5. я добавил весь класс! dialog.class запускает alertdialog.

Ответ №3:

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

Пример попытки поймать:-

 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{}