I have utilized mContext through "recyclerAdapter = new RecyclerAdapter(mContext, placeList);" but at the variable declaration, android studio mentioned that it was never assigned. What is the error here?
The main purpose of this is so that I can retrieve both text and images from firebase to android studio.
package com.example.myapplication;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
//firebase
//FirebaseDatabase firebaseDatabase;
private DatabaseReference myRef;
//Widgets
RecyclerView recyclerView;
//variables
private ArrayList<Place> placeList;
private RecyclerAdapter recyclerAdapter;
private Context mContext;//Private field 'mContext' is never assigned
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//set recyclerView
recyclerView = findViewById(R.id.recyclerView);
LinearLayoutManager LayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(LayoutManager);
recyclerView.setHasFixedSize(true);
//set Firebase
myRef = FirebaseDatabase.getInstance().getReference();
//set arraylist
placeList = new ArrayList<>();
//get a data method
GetDataFromFirebase();
//Clear Arraylist
ClearAll();
}
//this is data method
private void GetDataFromFirebase() {
Query query = myRef.child("places1");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
ClearAll();
for (DataSnapshot ds: snapshot.getChildren()){
Place place = new Place();
place.setImage(ds.child("image").getValue().toString()); //place image to "image:"
place.setName(ds.child("name").getValue().toString());
place.setLocation(ds.child("location").getValue().toString());
placeList.add(place);
}
recyclerAdapter = new RecyclerAdapter(mContext, placeList);//mContext is being used here
recyclerView.setAdapter(recyclerAdapter);
recyclerAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
private void ClearAll(){
if (placeList != null){
placeList.clear();
if(recyclerAdapter!=null){
recyclerAdapter.notifyDataSetChanged();
}
}
placeList = new ArrayList<>();
}
}
mContext was also used in my another class file called RecyclerAdapter.java
package com.example.myapplication;
import android.content.Context;
import android.icu.text.Transliterator;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private static final String Tag = "RecyclerView";
private Context mContext;
private ArrayList<Place> placeList;
public RecyclerAdapter(Context mContext, ArrayList<Place> placeList) {
this.mContext = mContext;
this.placeList = placeList;
}
@NonNull
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//call viewholder to place the data in this template
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.place_info, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//get textview
holder.textView1.setText(placeList.get(position).getName());
holder.textView2.setText(placeList.get(position).getName());
//image view using glide lib
Glide.with(mContext)
.load(placeList.get(position).getImage())
.into(holder.imageView); //diaply into image view
}
@Override
public int getItemCount() {
return placeList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
//widgets
ImageView imageView;
TextView textView1;
TextView textView2;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView =itemView.findViewById(R.id.imageView);
textView1=itemView.findViewById(R.id.textViewName);
textView2=itemView.findViewById(R.id.textViewLocation);
}
}
}