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