DatePicker на главном экране виджет [дубликат]

Вместо того, чтобы бросать код на вас, есть два понятия, которые являются ключом к пониманию того, как JS обрабатывает обратные вызовы и асинхронность. (это даже слово?)

Модель цикла события и параллелизма

Есть три вещи, о которых вам нужно знать; Очередь; цикл события и стек

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

while (queue.waitForMessage()) {
   queue.processNextMessage();
}

Как только он получает сообщение для запуска чего-то, он добавляет его в очередь. Очередь - это список вещей, которые ждут выполнения (например, ваш запрос AJAX). Представьте себе это так:

 1. call foo.com/api/bar using foobarFunc
 2. Go perform an infinite loop
 ... and so on

Когда одно из этих сообщений будет исполнено, оно выталкивает сообщение из очереди и создает стек, стек - это все, что нужно выполнить JS для выполнения инструкции в сообщение. Таким образом, в нашем примере ему говорят позвонить foobarFunc

function foobarFunc (var) {
  console.log(anotherFunction(var));
}

. Так что все, что foobarFunc должно выполнить (в нашем случае anotherFunction), будет вставлено в стек. исполняемый, а затем забытый - цикл события затем переместится на следующую вещь в очереди (или прослушивает сообщения)

. Главное здесь - порядок выполнения. Это

КОГДА что-то будет запущено

Когда вы совершаете вызов с использованием AJAX для внешней стороны или выполняете любой асинхронный код (например, setTimeout), Javascript зависит от ответ, прежде чем он сможет продолжить.

Большой вопрос, когда он получит ответ? Ответ в том, что мы не знаем, поэтому цикл событий ждет, когда это сообщение скажет: «Эй, забери меня». Если JS просто ждал этого сообщения синхронно, ваше приложение замерзнет, ​​и оно сосать. Таким образом, JS продолжает выполнение следующего элемента в очереди, ожидая, пока сообщение не будет добавлено обратно в очередь.

Вот почему с асинхронной функциональностью мы используем вещи, называемые обратными вызовами. Это похоже на обещание буквально. Как и в I , обещание что-то вернуть в какой-то момент jQuery использует специальные обратные вызовы, называемые deffered.done deffered.fail и deffered.always (среди других). Вы можете увидеть их все здесь

Итак, вам нужно передать функцию, которая в какой-то момент будет выполнена с переданными ей данными.

Поскольку обратный вызов не выполняется немедленно, но в более позднее время важно передать ссылку на функцию, которую она не выполнила. поэтому

function foo(bla) {
  console.log(bla)
}

, поэтому большую часть времени (но не всегда) вы пройдете foo не foo()

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

38
задан Gangnus 29 April 2013 в 07:25
поделиться

18 ответов

Как сказано в комментариях, проверьте logcat. Что вы увидите, это исключение NullPointerException. У меня тоже было это.

22
ответ дан Unconn 4 September 2018 в 08:10
поделиться

Проверьте элементы, которые вы использовали в представлении в виджетах.

Ссылка на документацию

Объект RemoteViews (и, следовательно, виджет приложения) может поддерживать следующие классы макетов:

  • FrameLayout
  • LinearLayout
  • RelativeLayout
  • GridLayout

И следующие классы виджетов:

  • AnalogClock
  • Кнопка
  • Хронометр
  • ImageButton
  • ] ImageView
  • ProgressBar
  • TextView
  • ViewFlipper
  • ListView
  • GridView
  • StackView
  • AdapterViewFlipper

Использование запрещенных элементов вызывает это сообщение «Проблема загрузки виджета», не сказав, где это произошло.

101
ответ дан axierjhtjz 4 September 2018 в 08:10
поделиться

У меня также была такая же проблема -

Я использовал android.support.constraint.ConstraintLayout, поэтому он сказал «Проблема с загрузкой виджета» после удаления этого и сменил на LinearLayout проблему, решенную как @Gangnus , говоря , он будет работать только для определенных видов.

0
ответ дан Bajrang Hudda 4 September 2018 в 08:10
поделиться

У меня была такая же проблема, но logcat не показывал ничего подозрительного, ни ошибки, ни предупреждения. В основном, я вызывал неправильный метод, чтобы изменить цвет текста textview .

0
ответ дан Community 4 September 2018 в 08:10
поделиться

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

Выше, я просто поиск слова «Виджет» и установка фильтра ни в одном конкретном приложении. Это по существу дает мне Throwable.getMessage() без полной трассировки стека.

0
ответ дан Eurig Jones 4 September 2018 в 08:10
поделиться

Конечно, используется прецедент, где на домашней странице загружен виджет, а затем пользователь удаляет приложение, содержащее виджет и приложение для настройки виджета.

Когда это произойдет, все, что вы см. «Проблема с загрузкой виджета» в виде тоста на главном экране. Насколько я могу судить, виджет не получает никаких указаний на то, что пакет удаляется, и я предполагаю, что домашний экран AppWidgetManager обрабатывает сообщение по умолчанию.

Непродуманное поведение со стороны ОС команда. Я предлагаю, чтобы было бы лучше вызвать методы onDisbled () и onDestroy () виджетов до того, как пакет будет удален, чтобы они могли при необходимости убирать, и пользователь (пользователь не-geek phone) получает чистый опыт.

3
ответ дан Grandpop 4 September 2018 в 08:10
поделиться

Это может быть вызвано Moving of the specific (Widget) Application from Internal Memory to SD card. ( Android - исправление ошибки «Загрузка загружаемого виджета» )

2
ответ дан hasanghaforian 4 September 2018 в 08:10
поделиться

В моем случае ошибка была вызвана измененным именем класса поставщика. Поэтому, если вы изменили имя класса поставщика виджета, попробуйте изменить его. Кроме того, если вы изменили имена xml-файлов (например, widget_info.xml, widget_layout.xml), вы также захотите изменить их обратно.

Это произошло только тогда, когда пользователь обновил приложение и «старый Виджет в данный момент виден.

0
ответ дан IKavanagh 4 September 2018 в 08:10
поделиться

У меня была такая же проблема. Устранена проблема: я использовал пользовательский вид в виджетах. В моей ситуации это был TextView с пользовательским шрифтом.

0
ответ дан ikosdroid 4 September 2018 в 08:10
поделиться

Исправлен другой вариант этой ошибки, не упомянутый в других ответах.

Симптомы были: 1) Ошибка «Ошибка загрузки виджета» на Gingerbread и ниже 2). Точная же сборка отлично работала на ICS и Jellybean 3) Нет ошибок в logcat

Проблема была вызвана манипулированием представлением, которое никогда не накачалось в remoteviews. В частности:

remoteviews.setViewVisibility(viewId, View.GONE);

Если viewId был действительным ресурсом, но он был в макете, который никогда не добавлялся к удаленным представлениям. Ошибок не было, и виджет отобразил «Проблема с загрузкой виджета» после вызова .updateAppWidget ()

1
ответ дан Jim Vitek 4 September 2018 в 08:10
поделиться

Проблема Загрузка результатов виджетов из проблемы / s в макете виджетов!

В виджете есть только ограниченный объем ресурсов. Убедитесь, что вы используете правильные элементы и их поля.

Объект RemoteViews (и, следовательно, виджет приложения) может поддерживать следующие классы ... классов:

AnalogClock
Button
...

Документация разработчика

Моя проблема: у меня было поле этой кнопки, которое не поддерживалось

android:onClick="onClick" 

Удаление этого параметра позволило отобразить виджет, где он был помещен (если он был помещен ранее) и в меню доступных виджетов.

Фактически установка android:onClick= для любого View приводит к этой ошибке.

3
ответ дан John 4 September 2018 в 08:10
поделиться

Только для записи. У меня есть FrameLayout с TextView внутри, весь контент в LinerLayout, который будет заголовком моего виджета. Первоначально у меня было это

<LinearLayout
[...] 

<FrameLayout
    android:id="@+id/widget"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/app_name"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:textColor="@android:color/white"/>
</FrameLayout>

[...] 
</LinearLayout>

. Как и все здесь, у меня появилось сообщение «Проблема загрузки виджета». Решением было изменение этого

    android:layout_height="?attr/actionBarSize"

для этого:

    android:layout_height="64dp"
0
ответ дан jorgeavilae 4 September 2018 в 08:10
поделиться

Еще одна возможная причина этого:

Я видел это в журнале:

Не удалось разрешить атрибут

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

, например

android:background="?themeColor"

Изменение этого на определенный цвет устраняло проблему .

android:background="@color/White"
8
ответ дан Kuffs 4 September 2018 в 08:10
поделиться

Я также сталкиваюсь с этой проблемой, но только из-за сильной компоновки виджетов. Макет виджетов должен быть таким же легким, как вы можете создать. Теперь мой виджет работает идеально.

3
ответ дан ParikshitSinghTomar 4 September 2018 в 08:10
поделиться

Объект RemoteViews (и, следовательно, виджет App) может поддерживать следующие классы макета:

FrameLayout
LinearLayout
RelativeLayout
GridLayout

И следующие классы виджетов:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper

Все, что используется кроме вышеприведенного, вызывает так называемый «виджет загрузки задачи».

Кроме того, проверьте журналы (без фильтра), чтобы увидеть точную строку этой проблемы.

3
ответ дан Sachin Sharma 4 September 2018 в 08:10
поделиться

Я столкнулся с этой проблемой, потому что я пытался использовать Check-box!

Итак, просто remove checkbox.

он будет работать нормально.

1
ответ дан swiftBoy 4 September 2018 в 08:10
поделиться

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

Так что не перекрывайте представления с помощью RelativeLayout, я все еще использую его, и он работает, но представления не перекрываются как можно больше.

0
ответ дан Willem van Ketwich 4 September 2018 в 08:10
поделиться

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

0
ответ дан Yusufmm 4 September 2018 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: