AsyncTask не имеет конструктора с нулевым аргументом - PullRequest
0 голосов
/ 06 сентября 2018

Допустим, у меня есть Android AsyncTask с именем UpdateInterfaceStatusesTask :

private class UpdateInterfaceStatusesTask extends AsyncTask<Object, Object, Object> {

    public UpdateInterfaceStatusesTask() {
        ;
    }

    protected Object doInBackground(Object... params) {
        View header = ((NavigationView) findViewById(R.id.nav_view)).getHeaderView(0);
        ((TextView) header.findViewById(R.id.nav_head_status)).setText(ServerThread.getInstance().isInterrupted() ? "Offline" : "Online");
        return null;
    }

    @Override protected void onPostExecute(Object param) {
        ;
    }
}

И я хочу программно создать новый экземпляр этого:

public void createNewInstance(Class<? extends AsyncTask<?, ?, ?>> clazz) {
    try {
        clazz.newInstance().execute();
    } catch (Exception x) {
        x.printStackTrace();
    }
}

Я получаю следующую ошибку:

W/System.err: java.lang.InstantiationException: java.lang.Class<nl.hypothermic.offthegrid.ChatActivity$UpdateInterfaceStatusesTask> has no zero argument constructor
W/System.err:     at java.lang.Class.newInstance(Native Method)
W/System.err:     at nl.hypothermic.offthegrid.tasks.TaskScheduler$1.run(TaskScheduler.java:27)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

У кого-нибудь есть такая же проблема?

1 Ответ

0 голосов
/ 06 сентября 2018

Я полагаю, что ваш закрытый класс на самом деле является вложенным, и вам нужно сделать его статическим, чтобы использовать конструктор с 0 аргументами. В противном случае всегда есть хотя бы один аргумент (всегда 1-й), который является экземпляром содержащего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...