Попытка вызвать виртуальный метод 'void android.media.MediaPlayer.setLooping (boolean)' для ссылки на пустой объект - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть проблема, которую я до конца хочу решить:

Я работаю над программой в Android Studio, которая по сути циклически перебирает список раскадровок (например, слайд-шоу), и яиспользуя для этого компонент viewPager.Это круто, потому что мне не нужны кнопки.Я могу просто провести пальцем (хотя я работаю над настройкой некоторых) Однако я также пытаюсь связать «слайды» в шоу со звуком (в данном случае, аудио раскадровки).Проблема в том, что приложение падает и выдает мне нулевую ошибку в logcat.Это то, что я сделал до сих пор.,,

Я создал слайд Адаптер. Упражнение:

package com.example.******.*************;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class SlideAdapter extends PagerAdapter {

    Context context;
    LayoutInflater inflater;

    // List of Images

    public int[] lst_storyboard = {
            R.drawable.imgmob02, R.drawable.imgmob03, R.drawable.imgmob04,
            R.drawable.imgmob05, R.drawable.imgmob06, R.drawable.imgmob07,
            R.drawable.imgmob08, R.drawable.imgmob09, R.drawable.imgmob010,
            R.drawable.imgmob011,R.drawable.imgmob012,R.drawable.imgmob013
    };

    // List of mp3 raw audio

    public int[] lst_audio_eng = {
            R.raw.audio_eng_01, R.raw.audio_eng_02, R.raw.audio_eng_03,
            R.raw.audio_eng_04, R.raw.audio_eng_05, R.raw.audio_eng_06,
            R.raw.audio_eng_07, R.raw.audio_eng_08, R.raw.audio_eng_09,
            R.raw.audio_eng_010, R.raw.audio_eng_011, R.raw.audio_eng_012
    };

    public SlideAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return lst_storyboard.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view==(LinearLayout)object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.activity_slide_adapter,container,false);
        LinearLayout layoutslide = (LinearLayout) view.findViewById(R.id.slidelinearlayout);
        ImageView imgslide = (ImageView)  view.findViewById(R.id.slideimg);

        imgslide.setImageResource(lst_storyboard[position]);


        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }

}

А это slideactivity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:id="@+id/slidelinearlayout">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/slideimg"
        android:contentDescription="@string/todo" />
</LinearLayout>

Это файл mainActivity:

    package com.example.******.***********;

import android.media.MediaPlayer;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import static com.example.gman5541.childrensbookconcept2.SlideAdapter.lst_audio_eng;

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private SlideAdapter myadapter;

    private MediaPlayer mp;
    private MediaPlayer BG;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myadapter = new SlideAdapter(this);
        viewPager = (ViewPager) findViewById(R.id.viewpager);

        viewPager.addOnPageChangeListener(player);

        viewPager.setAdapter(myadapter);
        viewPager.setCurrentItem(0);

        BG = MediaPlayer.create(getApplicationContext(), R.raw.audio_eng_01);
        BG.setLooping(true);
        BG.setVolume(100, 100);
        BG.start();
        mp = MediaPlayer.create(MainActivity.this,lst_audio_eng[0]);
        mp.start();
    }




    @Override
    protected void onPause() {
        super.onPause();
        BG.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        BG.start();
    }

    public ViewPager.OnPageChangeListener player = new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg1)
        {
            mp = MediaPlayer.create(MainActivity.this, lst_audio_eng[arg1]);
            mp.start();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {
        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {
        }
    };

}

И это XML-файл:

   <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.gman5541.childrensbookconcept2.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>

</LinearLayout>

Вот что я получил от отладки logcat:

--------- beginning of crash
2018-11-25 18:40:07.511 15354-15354/com.example.gman5541.childrensbookconcept2 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.gman5541.childrensbookconcept2, PID: 15354
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gman5541.childrensbookconcept2/com.example.gman5541.childrensbookconcept2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setLooping(boolean)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setLooping(boolean)' on a null object reference
        at com.example.gman5541.childrensbookconcept2.MainActivity.onCreate(MainActivity.java:31)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Хотя я также работаю над тем, чтобы "кнопку «play» с переключателем «sound» для включения и выключения звука. Сейчас я просто пытаюсь сопоставить один список (раскадровки) с другим списком (аудио).Программа работает, если я закомментирую строки MediaPlayer.Пожалуйста, помогите.

...