InstantiationException, newInstance не удалось: нет <init>, в то время как в Activity есть только конструктор по умолчанию - PullRequest
1 голос
/ 11 февраля 2011

Мы получили трассировку стека InstantiationException при создании экземпляра Activity. Журнал имеет newInstance failed: no <init>() сообщение

Ситуация совершенно ясна: виртуальная машина не может найти конструктор по умолчанию без параметров. Это объясняется в этой теме

Как показало мое исследование, люди обычно получают это, когда добавляют параметры в конструкторы своей Деятельности, что, безусловно, плохо. Но это не наш случай - у нас всегда есть доступ к конструктору по умолчанию. Другой причиной этого исключения может быть другое исключение при инициализации некоторого члена (инициализация выполняется в конструкторе по умолчанию, верно?) - но опять же мы этого не делаем. Все члены инициализируются в методе onCreate ().

Некоторые детали (имена изменены): активность добавлена ​​в AndroidManifest.xml:

<manifest
    package="app.name"
    ....>
    ....
    <activity
        android:name="app.name.activity.OurActivity"
        android:label="@string/NAME">
    </activity>

Теперь способ, которым мы создаем намерение, может выглядеть странно, но он работает в каждом случае:

Context packageContext = layoutInflater.getContext().createPackageContext("app.name", 0);
Intent intent = new Intent(packageContext, OurActivity.class);
...startActivity(intent);

Я бы подумал, что это может быть проблемой, но: 1) это прекрасно работает месяцами 2) тот же клиент получил то же исключение в другом действии, которое начинает использовать действие в качестве контекста;

Я не могу воспроизвести исключение, чтобы понять / исправить его. Но так или иначе один из наших клиентов получил это. У него есть устройство Droid ERIS (Verizon)

Есть мысли? Есть ли какой-то случай, о котором я не знаю, когда ВМ не найдет конструктор по умолчанию?

...