Search code examples
androidandroid-studiomvvmadapterandroid-recyclerview

Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference whate problem


i want to run sound when click item but error show when click item image and text sho corict but click item to play sound give error can shoe error in photo and cobe nomber 48

i want to run sound when click item but error show when click item image and text sho corict but click item to play sound give error can shoe error in photo and cobe nomber 48

as shown

BabListAdapter
package com.example.learnn.ui;

import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;

import java.util.ArrayList;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
    private MediaPlayer mMediaPlayer;
    Context context;


    private ArrayList<BabyModel> letterList = new ArrayList<>();

    public BabyListAdapter() {
        this.context = context;

    }

    @NonNull
    @Override
    public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
    }




    @Override
    public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
        holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
        holder.text.setText (letterList.get(position).getDefaultText());
        holder.part.setOnClickListener ( new View.OnClickListener () {
            @Override
            public void onClick(View v) {
                mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
                mMediaPlayer.start();
            }
        } );

    }

    @Override
    public int getItemCount() {
        return letterList.size();
    }


    public void setList(ArrayList<BabyModel> letterList) {
        this.letterList = letterList;
        notifyDataSetChanged();
    }

    public class BabyViewHolder extends RecyclerView.ViewHolder {
        ImageView image;
        TextView text;
        LinearLayout part;


        public BabyViewHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.imagee);
            text = itemView.findViewById(R.id.text);
            part = itemView.findViewById(R.id.part);
        }

    }


}






EnglishLetterActivity
package com.example.learnn;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;

import java.util.ArrayList;

public class EnglishlettersActivity extends AppCompatActivity {

    BabyViewModel babyViewModel;
    ImageView imagee,next;
    RecyclerView recycler;
    private int index = 0;
    private  MediaPlayer mMediaPlayer;
    ArrayList arrayList,letterList;
    Context context;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);

        imagee = (ImageView)findViewById(R.id.imagee);
        recycler = (RecyclerView)findViewById(R.id.recycler);



        final BabyListAdapter adapter = new BabyListAdapter();
        recycler.setAdapter(adapter);
        GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
        recycler.setLayoutManager(layoutManager);

        babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
        babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
            @Override
            public void onChanged(ArrayList<BabyModel> babyModels) {
                adapter.setList(babyModels);

            }
        });
        babyViewModel.getLetterRecourceID();









    }


}

BabyViewModel
package com.example.learnn.ui;

import com.example.learnn.R;

import java.util.ArrayList;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class BabyViewModel extends ViewModel {

    ArrayList arrayList;

    public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
    public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
    public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();


    public void getLetterRecourceID(){
        letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
     }

    public void getDefaultText(){
     defaultTextMutableLiveData.setValue(getDataFromDatabase());
    }
    public void getAudioResourceId(){
        audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
    }

     private ArrayList<BabyModel> getDataFromDatabase(){
        ArrayList<BabyModel> arrayList = new ArrayList<>();
         arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
         arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
         arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
         arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
         arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
         arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
         arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
         arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
         arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
         arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
         arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
         arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
         arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
         arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
         arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
         arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
         arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
         arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
         arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
         arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
         arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
         arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
         arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
         arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
         arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
         arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
         return arrayList;
    }
}




listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout 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"
    >

    <data>

    </data>


       <FrameLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content">



            <LinearLayout
                android:id="@+id/part"
                android:orientation="vertical"
                android:background="@drawable/letter_style"
                android:layout_margin="5dp"
                android:layout_width="120dp"
                android:layout_height="150dp">

                <ImageView
                    android:gravity="center"
                    android:id="@+id/imagee"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="5"
                    android:layout_marginTop="15dp"
                    android:layout_marginRight="15dp"
                    android:layout_marginLeft="15dp"
                    tools:context=".EnglishlettersActivity" />

                <TextView
                    android:gravity="center_horizontal"
                    android:id="@+id/text"
                    android:textSize="20sp"
                    android:textStyle="bold"
                    android:textColor="#141414"
                    android:text="ddfdfdfdf"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:layout_marginBottom="10dp"
                     />
            </LinearLayout>
       </FrameLayout>

</layout>







BabListAdapter

package com.example.learnn.ui;

import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
    private MediaPlayer mMediaPlayer;
    Context context;

    private ArrayList<BabyModel> letterList = new ArrayList<>();

    public BabyListAdapter() {
        this.context = context;
    }

    @NonNull
    @Override
    public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
    }


    @Override
    public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
        holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
        holder.text.setText (letterList.get(position).getDefaultText());
        holder.part.setOnClickListener ( new View.OnClickListener () {
            @Override
            public void onClick(View v) {
                mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
                mMediaPlayer.start();
            }
        } );
    }

    @Override
    public int getItemCount() {
        return letterList.size();
    }

    public void setList(ArrayList<BabyModel> letterList) {
        this.letterList = letterList;
        notifyDataSetChanged();
    }
    public class BabyViewHolder extends RecyclerView.ViewHolder {
        ImageView image;
        TextView text;
        LinearLayout part;

        public BabyViewHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.imagee);
            text = itemView.findViewById(R.id.text);
            part = itemView.findViewById(R.id.part);
        }
    }

}






EnglishLetterActivity
package com.example.learnn;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;

import java.util.ArrayList;

public class EnglishlettersActivity extends AppCompatActivity {

    BabyViewModel babyViewModel;
    ImageView imagee,next;
    RecyclerView recycler;
    private int index = 0;
    private  MediaPlayer mMediaPlayer;
    ArrayList arrayList,letterList;
    Context context;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);

        imagee = (ImageView)findViewById(R.id.imagee);
        recycler = (RecyclerView)findViewById(R.id.recycler);



        final BabyListAdapter adapter = new BabyListAdapter();
        recycler.setAdapter(adapter);
        GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
        recycler.setLayoutManager(layoutManager);

        babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
        babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
            @Override
            public void onChanged(ArrayList<BabyModel> babyModels) {
                adapter.setList(babyModels);

            }
        });
        babyViewModel.getLetterRecourceID();









    }


}

BabyViewModel
package com.example.learnn.ui;

import com.example.learnn.R;

import java.util.ArrayList;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class BabyViewModel extends ViewModel {

    ArrayList arrayList;

    public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
    public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
    public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();


    public void getLetterRecourceID(){
        letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
     }

    public void getDefaultText(){
     defaultTextMutableLiveData.setValue(getDataFromDatabase());
    }
    public void getAudioResourceId(){
        audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
    }

     private ArrayList<BabyModel> getDataFromDatabase(){
        ArrayList<BabyModel> arrayList = new ArrayList<>();
         arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
         arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
         arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
         arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
         arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
         arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
         arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
         arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
         arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
         arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
         arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
         arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
         arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
         arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
         arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
         arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
         arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
         arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
         arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
         arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
         arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
         arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
         arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
         arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
         arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
         arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
         return arrayList;
    }
}




listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout 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"
    >

    <data>

    </data>


       <FrameLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content">



            <LinearLayout
                android:id="@+id/part"
                android:orientation="vertical"
                android:background="@drawable/letter_style"
                android:layout_margin="5dp"
                android:layout_width="120dp"
                android:layout_height="150dp">

                <ImageView
                    android:gravity="center"
                    android:id="@+id/imagee"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="5"
                    android:layout_marginTop="15dp"
                    android:layout_marginRight="15dp"
                    android:layout_marginLeft="15dp"
                    tools:context=".EnglishlettersActivity" />

                <TextView
                    android:gravity="center_horizontal"
                    android:id="@+id/text"
                    android:textSize="20sp"
                    android:textStyle="bold"
                    android:textColor="#141414"
                    android:text="ddfdfdfdf"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:layout_marginBottom="10dp"
                     />
            </LinearLayout>
       </FrameLayout>

</layout>

Solution

  • Change made in your adpter

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

    In your activity

    BabyListAdapter adapter = new BabyListAdapter(EnglishlettersActivity.this);