Android util androidruntimeexception requestfeature must be called before adding content

AndroidRuntimeException: requestFeature() must be called before adding content #213

Comments

Leiluojun commented Mar 4, 2020

com.google.android.gms.ads.AdActivity>: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3190)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
at android.app.ActivityThread.access$1000(ActivityThread.java:211)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6946)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:374)
at android.app.Activity.requestWindowFeature(Activity.java:3934)
at com.google.android.gms.ads.internal.overlay.k.a(:com.google.android.gms.policy_ads_fdr_dynamite@21207002@21207002.283464268.283464268:24)
at com.google.android.gms.ads.internal.overlay.client.b.a(:com.google.android.gms.policy_ads_fdr_dynamite@21207002@21207002.283464268.283464268:17)
at ff.onTransact(:com.google.android.gms.policy_ads_fdr_dynamite@21207002@21207002.283464268.283464268:4)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.internal.ads.zzej.transactAndReadExceptionReturnVoid(Unknown Source) (#pluginId:host#)
at com.google.android.gms.internal.ads.p.onCreate(Unknown Source)
at com.google.android.gms.ads.AdActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:6575)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
. 10 more

The text was updated successfully, but these errors were encountered:

stowy commented Mar 23, 2020

Hi, sorry for the delay, can you please specify how you reproduced this issue? The following info would help:

  • Device model
  • Android version
  • Mobile Ads SDK version
  • app
  • ad format

If this is not an issue with a sample app, can I request that you make a request on our support forum at https://groups.google.com/forum/#!categories/google-admob-ads-sdk/android — they will be able to help debug your issue with you efficiently.

Generally these issues are specifically for issues with the sample apps only, as more in depth support for your specific issues is handled by our support team on the forum.

When posting to the forum, please also provide specific details including any errors being seen and code showing how to reproduce the problem.

Источник

android.util.AndroidRuntimeException: requestFeature () необходимо вызывать перед добавлением содержимого

Я получаю эту ошибку android.util.AndroidRuntimeException: requestFeature() must be called before adding content . Как вы можете видеть в приведенном ниже коде, строка requestWindowFeature(Window.FEATURE_NO_TITLE); предшествует строке кода setContentView(R.layout.mainmenu); . Этот код onCreate () имеет тот же формат практически во всех моих действиях, и до сих пор у меня никогда не было проблем с ним. С тех пор, как я обновился до ADT 22, повсюду появлялось множество случайных ошибок. Я исправил множество этих ошибок, и это моя последняя ошибка.

Что я могу сделать, чтобы исправить эту ошибку?

12 ответов

Я также столкнулся с этой проблемой, но когда я вызываю запрос окна перед вызовом super.onCreate () , проблема была решена, попробуйте также ..

Надеюсь, что это поможет вам. )

Отредактировано: другие возможные решения для новых версий Android

Скрыть строку состояния на Android 4.0 и более ранних версиях

Преимущества использования темы деятельности заключаются в следующем:

  • Его легче поддерживать и он менее подвержен ошибкам, чем программная установка флага.
  • Это приводит к более плавным переходам пользовательского интерфейса, поскольку система имеет информацию, необходимую для визуализации вашего пользовательского интерфейса, прежде чем создавать экземпляр основного действия вашего приложения.
Читайте также:  Как удалить apk файл android

Версия Android ниже, чем Jellybean

Скрыть строку состояния на Android 4.1 и более поздних версиях

Обратите внимание на следующее:

  • После того, как флаги пользовательского интерфейса были очищены (например, путем перехода от действия), ваше приложение должно сбросить их, если вы хотите снова скрыть полосы. См. Ответ на изменения видимости пользовательского интерфейса для обсуждения того, как отслеживать пользовательский интерфейс. видимость меняется, чтобы ваше приложение могло соответствующим образом реагировать.
  • То, где вы устанавливаете флаги пользовательского интерфейса, имеет значение. Если вы скроете системные панели в методе onCreate () вашего действия и пользователь нажмет кнопку Home, системные панели появятся снова. Когда пользователь повторно открывает действие, onCreate () не вызывается, поэтому системные панели остаются видимыми. Если вы хотите, чтобы изменения пользовательского интерфейса системы сохранялись, когда пользователь входит в вашу деятельность и выходит из нее, установите флаги пользовательского интерфейса в onResume () или onWindowFocusChanged ().
  • Метод setSystemUiVisibility () действует только в том случае, если вид, из которого вы его вызываете, является видимым.
  • Переход от представления приводит к сбросу флагов, установленных с помощью setSystemUiVisibility ().

У меня была эта ошибка с AlertDialog , и ошибка возникала в API 19 только при вызове dialog.show() .

Выяснил, что импорт android.app.AlertDialog вызывает проблему, поэтому я изменил его на androidx.appcompat.app.AlertDialog , и он исправил его.

Обратите внимание, что это будет работать, если вы используете androidx. в противном случае следует использовать старую версию этого импорта appcompat.

Неуместно ваша строка: super.onCreate (savedInstanceState);

Используйте этот способ:

Пожалуйста, попробуйте следующие варианты, хотя бы один из них должен работать для вас:

Если вы используете DialogFragment, попробуйте не переопределять оба метода onCreateDialog(..) и onCreateView(..) (это изменение сработало для меня)

попробуйте supportRequestWindowFeature(Window.FEATURE_NO_TITLE)/requestWindowFeature(Window.FEATURE_NO_TITLE) до setContentView(..) в действии и после super.onCreate(..);

Попробуйте вариант 2 до super.onCreate(..);

Я думаю, что самый простой способ сделать это — использовать приведенный ниже код

Расширить ( Activity ) вместо ( ActionBarActivity )

Пример: public class Itemdetails extends Activity <.

Затем в onCreate напишите:

Просто установите только такой стиль, никакое изменение стороны кодирования не требуется.

Я расширял DialogFragment , и приведенный выше ответ не сработал. Мне пришлось использовать getDialog (), чтобы удалить заголовок:

Я также столкнулся с этой ошибкой из-за другого рабочего процесса. Я создал собственный класс DialogFragment и две функции @Override — onCreateView и onCreateDialog. Моя функция onCreateView захватила настраиваемый макет для фрагмента, а моя функция onCreateDialog создала AlertDialog.Builder.

Это не сработало, потому что onCreateDialog вызывается до onCreateView. После того, как я удалил onCreateView [, переместив свое расширение представления в onCreateDialog, я обнаружил ошибку:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.

Читайте также:  Кинопоиск hd яндекс для андроид

Я понял, что моя трудность возникла из-за попытки реализовать оба переопределения, так как я хотел 1) использовать макет для основного вида диалогового окна и 2) использовать предварительно определенные в Builder кнопки Положительный / Отрицательный. Мое решение заключалось в создании положительных / отрицательных кнопок в моем настраиваемом диалоговом окне, поэтому я удалил свою реализацию функции Override onCreateDialog.

Надеюсь, это поможет кому-то в будущем!

Вот несколько ТАК вопросов, которые мне помогли:

Если вы используете свою активность как диалог (с Theme.Dialog), убедитесь, что вы расширяете Activity вместо ActionBarActivity (значение по умолчанию предоставляется мастером Android Studio). Тогда вы можете использовать

Убедитесь, что ваш класс является наследником Activity или ActionBarActivity. Если вы используете ActionBarActivity, используйте Activity.

Я получил это исключение ( android.util.AndroidRuntimeException: requestFeature() must be called before adding content ) при использовании

В более старом устройстве под управлением Android 2.3.5 (Gingerbread). Я использую библиотеку поддержки v7.

Ошибка была исправлена, когда я изменил его на использование:

Так что это может быть скорее вводящее в заблуждение сообщение об ошибке, чем что-либо еще.

Источник

Android.util.AndroidRuntimeException: requestFeature () необходимо вызвать перед добавлением содержимого

Я получаю это android.util.AndroidRuntimeException: requestFeature() must be called before adding content ошибки android.util.AndroidRuntimeException: requestFeature() must be called before adding content . Как вы можете видеть в приведенном ниже коде, requestWindowFeature(Window.FEATURE_NO_TITLE); Строка появляется перед setContentView(R.layout.mainmenu); Строка кода. Этот код onCreate () является одним и тем же форматом почти во всех моих действиях, и до сих пор у меня никогда не было проблем с ним. С тех пор как я обновился до 22 ADT, во всем мире появилось много случайных ошибок. Я пропустил множество ошибок, и это мой последний.

Что я могу сделать, чтобы исправить эту ошибку?

Я также столкнулся с этой проблемой, но когда я вызываю запрос окна перед вызовом super.onCreate (), тогда проблема была решена, пожалуйста, попробуйте также.

Надеюсь, что это поможет вам…:)

Отредактировано: Для других возможных решений для Android’d новых версий

Скрыть строку состояния на Android 4.0 и ниже

Преимущества использования темы деятельности заключаются в следующем:

  • Это легче поддерживать и меньше подвергать ошибкам, чем устанавливать программный код.
  • Это приводит к более плавным переходам пользовательского интерфейса, потому что у системы есть информация, необходимая для визуализации вашего пользовательского интерфейса, прежде чем создавать основную активность вашего приложения.

Версия для Android ниже, чем у Jellybean

Скрыть строку состояния на Android 4.1 и выше

Обратите внимание на следующее:

  • После того, как флаги пользовательского интерфейса были очищены (например, путем перехода от активности), вашему приложению необходимо сбросить их, если вы хотите снова скрыть панели. См. Ответы на изменения видимости пользовательского интерфейса для обсуждения того, как прослушивать изменения видимости пользовательского интерфейса, чтобы ваше приложение могло соответствующим образом реагировать.
  • Когда вы устанавливаете флаги интерфейса, это имеет значение. Если вы спрячете системные бары в методе onCreate () вашей деятельности и пользователь нажмет Home, системные панели снова появятся. Когда пользователь снова открывает активность, onCreate () не будет вызван, поэтому системные панели останутся видимыми. Если вы хотите, чтобы изменения в системном пользовательском интерфейсе сохранялись, когда пользователь перемещается в вашу активность и выходит из нее, установите флаги пользовательского интерфейса в onResume () или onWindowFocusChanged ().
  • Метод setSystemUiVisibility () действует только в том случае, если вид, который вы вызываете из него, виден.
  • При перемещении в сторону от вида создаются флаги с установкой setSystemUiVisibility ().
Читайте также:  При загрузке через android

Я получил это исключение ( android.util.AndroidRuntimeException: requestFeature() must be called before adding content ) при использовании

В более старом устройстве под управлением Android 2.3.5 (Gingerbread). Я использую библиотеку поддержки v7.

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

Таким образом, это может быть скорее ошибочное сообщение об ошибке, чем что-либо еще.

Проверьте, что ваш класс распространяется от Activity или ActionBarActivity. Если вы используете ActionBarActivity, используйте Activity.

Если вы используете свою активность как диалог (с Theme.Dialog), убедитесь, что вы увеличиваете активность вместо ActionBarActivity (по умолчанию задано с помощью мастера Android Studio). Тогда вы можете использовать

Я расширил DialogFragment, и вышеупомянутый ответ didnot работы. Мне пришлось использовать getDialog (), чтобы удалить заголовок:

Я также столкнулся с этой ошибкой из другого рабочего процесса. Я создал специальный класс DialogFragment, и я создал две функции @Override – onCreateView и onCreateDialog. Моя функция onCreateView захватила пользовательский макет для фрагмента, а моя функция onCreateDialog создала AlertDialog.Builder.

Это оказалось неработоспособным, потому что onCreateDialog вызывается перед onCreateView. После того, как я удалил onCreateView [, переместив мой пользовательский просмотр в onCreateDialog, я столкнулся с ошибкой:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.

Я понял, что моя трудность связана с попыткой реализовать оба переопределения, так как я хотел: 1) использовать макет для основного вида диалога и 2) использовать предопределенные кнопки Builder / Negative Builder. Мое решение состояло в том, чтобы создать положительные / отрицательные кнопки в моем пользовательском диалоговом окне, поэтому я удалил реализацию функции Override onCreateDialog.

Надеюсь, это поможет кому-то в будущем!

Вот несколько вопросов, которые помогли мне:

  • Проблема раздувания пользовательского представления для AlertDialog в DialogFragment
  • ViewPager в DialogFragment – IllegalStateException: Фрагмент не имеет вида
  • Пользовательский макет для DialogFragment OnCreateView и OnCreateDialog
  • У указанного ребенка уже есть родитель. Вы должны сначала вызвать removeView () родителя ребенка

Расширить (действие) вместо ( ActionBarActivity )

Затем в onCreate напишите:

Я думаю, что самый простой способ сделать это – использовать этот ниже код

Источник

Оцените статью