Метод onCreate() не вызывает метод A, но OnStart() вызывает метод A

#java #android-studio #oncreate #onstart

#java #android-студия #oncreate создать #onstart

Вопрос:

У меня есть метод onCreate(), который выглядит примерно так:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);        
    
    if (blah) {
        blahblah;
    } else {
        method1();
    }

    MethodA();

}
 

Метод onActivityResult, который выглядит примерно так:

 @Override
protected void onActivityResult(int a, int b, Intent c) {
    super.onActivityResult(b, a, c);
    if (b == blah) {
        if (a == blah) {
            Method1();
        }
    }
}
 

Метод1():

 public void Method1() {
    blah
}
 

У меня есть methodA(), который должен появиться в первый раз (на данный момент он не появляется, если я не помещу methodA() в OnStart() — тогда он появляется только при второй попытке открытия приложения

 public void MethodA() {
   sets text on screen
   
}









 
 

Ответ №1:

Исходя из того, что вы описали, похоже, что метод onCreate() возвращается раньше, чем ожидалось.

Если макет устанавливается (т.Е. Вызов setContentView() сработал), то methodA() обязательно должен выполняться, если, как упоминалось ранее, метод onCreate() не возвращается ранее в любом из if или else выполнение блока. Используйте отладчик для выполнения пошаговой отладки и пошаговых вызовов методов, таких как method1() в блоке if-else .

     super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);        
    
/* Did you check this If-Else block so that the control actually */
/* goes down below? to MethodA() */
    if (blah) {
        blahblah;
    } else {
        method1();
    }

    MethodA();

}
 

Комментарии:

1. По некоторым причинам мой Debuggin не работает, я не могу создавать журналы. Стоит ли знать, что перед этим действием у меня есть MainActivity, в котором также есть метод onCreate (Log.d работает там, но не для упомянутого здесь действия onCreate

2. Правильно, я исправил ведение журнала, и кажется, что метод определенно выполняется. Однако метод также корректен на 100%, потому что при выполнении в методе OnStart() вместо этого отображаются ожидаемые данные (но только во второй раз, когда приложение открывается, как указано)

Ответ №2:

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

  • Из того, что я прочитал, вы полагаетесь только на визуальную обратную связь, чтобы проверить, вызывается ли ваша функция.

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

Попробуйте использовать Logcat (встроенный по умолчанию в Android Studio, а не плагин), чтобы проверить, вызывается функция или нет. Начните с проверки того, вызывается ли onCreate при запуске (что, по моему опыту, должно быть так).

Поверх вашего класса напишите статическую переменную-член (если вы напишете «logt» и нажмете tab, она автоматически создастся).:

 private static final String TAG = "ActivityName";
 

В методе onCreate write (если вы напишете «logd» и нажмете tab, он автоматически создается):

 log.d(TAG, "I am printing from the OnCreate method");
 

В Logcat вы сможете выполнить фильтрацию по вашему debugTagName .

https://developer.android.com/studio/debug/am-logcat

Если это не проблема, проверьте, работаете ли вы с фрагментами или activity . В контейнерах метод onCreate может быть вызван ранее для фрагментов (когда их нет на экране). Это не должно вызывать никаких проблем, но может возникнуть, когда элементы программно перемещаются или удаляются из другого фрагмента.

Комментарии:

1. Правильно, я исправил ведение журнала, и кажется, что метод определенно выполняется. Однако метод также корректен на 100%, потому что при выполнении в методе OnStart() вместо этого отображаются ожидаемые данные (но только во второй раз, когда приложение открывается, как указано)

2. Несколько вещей, которые вы можете проверить: -Цвет текста такой же, как у фона? -Корректно отображать ограничения положения? -Элементы перекрываются? Попробуйте сделать что-то еще в методе «methodA ()», например, измените цвет фона на синий / желтый и посмотрите, что произойдет.

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

4. Рад, что ты смог это исправить. Если вы нашли мой ответ полезным, пожалуйста, подумайте о том, чтобы отметить его как ответ или проголосовать за.