Nano Hash - криптовалюты, майнинг, программирование

Проигрыватель YouTube аварийно завершает работу (java.lang.NullPointerException, ссылка на нулевой объект)

мой YouTube Player вылетает, и я не знаю почему.

Это мой код Java: @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_youtube); Панель инструментов панели инструментов = (Панель инструментов) findViewById (R.id.toolbar); setSupportActionBar (панель инструментов);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);


    playerFragment = (YouTubePlayerSupportFragment) getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);
    playerFragment.initialize(YouTubeKey, this);
}



@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
    mPlayer = youTubePlayer;

    //Enables automatic control of orientation
    mPlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION);

    //Show full screen in landscape mode always
    mPlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE);

    //System controls will appear automatically
    mPlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI); 

    if (!b) {
        mPlayer.cueVideo("xxx");
        mPlayer.loadVideo("xxx");
    }
    else
    {
        mPlayer.play();
    }
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
    mPlayer = null;
    String ausgabe = youTubeInitializationResult.toString();
    Log.d("hi", ausgabe);
} }

Проблема решена

30.05.2017

  • Как выглядит фрагмент XML для (R.id.youtube_player_fragment)? 30.05.2017
  • Потому что у меня есть ‹фрагмент android: id = @ + id / youtube_player_fragment android: name = com.google.android.youtube.player.YouTubePlayerFragment android: layout_width = match_parent android: layout_height = wrap_content /› в моем content_youtube.xml 30.05.2017

Ответы:


1

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

getSupportFragmentManager().findFragmentById(R.id.youtube_player_fragment);

Вам может быть полезно взглянуть на этот связанный вопрос:

findFragmentById возвращает значение null


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

Попробуйте использовать:

<fragment
  android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
30.05.2017
  • Я думал, что метод playerFragment.initialize (YouTubeKey, this); возвращает null, не так ли? 30.05.2017
  • @FabianSawischa Я добавил правку в свой ответ. Вы пробовали переключить имя в макете, чтобы использовать библиотеку поддержки? 30.05.2017
  • Спасибо друг! Вы мне очень помогли. 31.05.2017

  • 2

    Я пробовал много из этих предложений, но ни один из них не помог мне. В конце концов я создал контейнер, а затем заменил его во время выполнения на YouTubeFragment. Это отлично сработало для меня.

    1. Создал containerView в моем файле макета как, обратите внимание, это всего лишь часть моего файла макета

      <View
          android:padding="10dp"
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="@color/gray90"/>
      
      
      
      <FrameLayout
          android:padding="20dp"
          android:id="@+id/youtubeContent"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>
      
    2. Then I created an instance of the youtube fragment as below

      youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance ();

    3. Затем я заменил его стандартным способом, как показано ниже:

      Менеджер FragmentManager = getFragmentManager (); FragmentTransaction transaction = manager.beginTransaction (); transaction.replace (R.id.youtubeContent, youTubePlayerFragment) .commit ();

    Надеюсь, это поможет другим

    27.06.2017
    Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..