Ошибка конструктора с нулевым аргументом в классе получателяAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Ошибка конструктора с нулевым аргументом в классе получателя

Сообщение Anonymous »

Я пишу приложение, которое будет реализовывать запланированные сигналы тревоги, у которых есть проблемы в классе приемника.
Что я хочу, так это, во-первых, сигнал тревоги будет реализован в части onCreate в MainActivity .
Затем в определенное время, когда onReceive void получит pendingIntent, onReceive void вызовет другой void в MainActivity. Это делается путем создания интерфейса и пустого void, чтобы onReceive мог вызвать одноименный метод в MainActivity.
Наконец, onReceive void решит, следует ли отправлять уведомление в зависимости от результата вызванного void из MainActivity через интерфейс.
Я пытался сослаться на этот ответ и изменить его в своем скрипте, но он возвращает ошибку

Код: Выделить всё

Process: com.example.sahelper, PID: 5930
java.lang.RuntimeException: Unable to instantiate receiver com.example.sahelper.alarm.AlarmReceiver: java.lang.InstantiationException: java.lang.Class has no zero argument constructor

Вот моя основная активность

Код: Выделить всё

    @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// AlarmController is used to schedule alarm
AlarmController alarmController =
new AlarmController(MainActivity.this, MainActivity.this);
alarmController.new_test_alarm(); // schedule an alarm
}

// This method is supposed to be called by interface
@Override
public void check_duty()
{
// Do something here...
// Do something here...
// Do something here...
}
Вот мой AlarmController.java

Код: Выделить всё

    // Constructor
public AlarmController(Activity activity, Context context)
{
this.myactivity = activity;
this.mycontext = context;
}

public void new_test_alarm()
{
// Some codes here...
// Some codes here...
// Some codes here...

Intent intent = new Intent(myactivity, AlarmReceiver.class);
intent.setAction(SECOND_DEADLINE_ALARM_RECEIVE_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
mycontext,
Integer.parseInt(it.getKey()), // Here is the noti_id
intent,
FLAG_MUTABLE);

AlarmManager alarmManager = (AlarmManager) myactivity.getSystemService
(Context.ALARM_SERVICE);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
(System.currentTimeMillis() + 10 * 1000),
pendingIntent);
}
Вот мой интерфейс

Код: Выделить всё

public interface Receiver_MainActivity_Interface
{
public void check_duty();
}
И, наконец, вот мой класс приемника

Код: Выделить всё

public class AlarmReceiver extends BroadcastReceiver
{
private Receiver_MainActivity_Interface mylistener;
public AlarmReceiver(Receiver_MainActivity_Interface listener)
{
this.mylistener = listener;
}

@Override
public void onReceive(Context context, Intent intent)
{
if (Objects.equals(intent.getAction(), SECOND_DEADLINE_ALARM_RECEIVE_ACTION))
{
mylistener.check_duty();

// And some codes here continue...
// And some codes here continue...
// And some codes here continue...
}
}
}
Я подозреваю, что проблема связана с «Intent Intent = new Intent(myactivity, AlarmReceiver.class);» в качестве параметра передается классу AlarmReceiver. Но как мне передать ему интерфейс как переменную, когда я определяю намерение?
Что мне делать, чтобы решить проблему? Любое предложение приветствуется.
Изменить
Я не могу и не думаю, что возможно переместить void внутри mainactivity в класс onReceive, потому что этот void включает в себя некоторые элементы объявлены (WebView) в MainActivity.

Подробнее здесь: https://stackoverflow.com/questions/792 ... iver-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»