Mastah
I'm trying to read data from my FireBase Realtime DataBase. I'm using Recycler view in Fragment to read it. When I'm coding there is no sign of error. But When I try to run the Code, it shows error like this :
2021-04-25 20:37:21.060 20896-20896/com.kuplay.storingdata E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kuplay.storingdata, PID: 20896
java.lang.ClassCastException: com.kuplay.storingdata.ui.MainActivity cannot be cast to com.kuplay.storingdata.Adapter.RecyclerViewAdapter$dataListener
at com.kuplay.storingdata.Adapter.RecyclerViewAdapter.<init>(RecyclerViewAdapter.java:39)
at com.kuplay.storingdata.Fragment.data.DataFragment$1.onDataChange(DataFragment.java:80)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:239)
at android.app.ActivityThread.main(ActivityThread.java:8179)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
I've tried many ways and tried searching many refference from google. But it doesn't work.
can Any Body help me to solve this error... Cause I'm still a noob.
Here is My Code :
DataFragment.java
package com.kuplay.storingdata.Fragment.data;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.auth.FirebaseAuth;
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.ValueEventListener;
import com.kuplay.storingdata.Adapter.RecyclerViewAdapter;
import com.kuplay.storingdata.Model.data_finance;
import com.kuplay.storingdata.R;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Objects;
public class DataFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerViewAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
private FirebaseAuth auth;
private DatabaseReference reference;
private ArrayList<data_finance> dFinance;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_data, container, false);
recyclerView = root.findViewById(R.id.data_list);
auth = FirebaseAuth.getInstance();
MyRecyclerView();
GetData();
return root;
}
private void MyRecyclerView(){
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
DividerItemDecoration itemDecoration = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL);
itemDecoration.setDrawable(Objects.requireNonNull(ContextCompat.getDrawable(getActivity(), R.drawable.line)));
recyclerView.addItemDecoration(itemDecoration);
}
private void GetData(){
reference = FirebaseDatabase.getInstance().getReference();
reference.child("Finance");
reference.child(Objects.requireNonNull(auth.getUid()));
reference.child("Data");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot dataSnapshot) {
//Inisialisasi ArrayList
dFinance = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
data_finance finance = snapshot.getValue(data_finance.class);
assert finance != null;
finance.setId(snapshot.getKey());
dFinance.add(finance);
}
adapter = new RecyclerViewAdapter(dFinance, getActivity());
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(@NotNull DatabaseError databaseError) {
Toast.makeText(getActivity(), "Data Gagal Dimuat", Toast.LENGTH_LONG).show();
Log.e("MyListActivity", databaseError.getDetails() + " " + databaseError.getMessage());
}
});
}
}
RecyclerViewAdapter.java
package com.kuplay.storingdata.Adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.RecyclerView;
import com.kuplay.storingdata.Model.data_finance;
import com.kuplay.storingdata.R;
import com.kuplay.storingdata.ui.updateData;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private ArrayList<data_finance> listFinance;
private Context context;
public interface dataListener{
void onDeleteData(data_finance data, int position);
}
dataListener listener;
public RecyclerViewAdapter(ArrayList<data_finance> listFinance, Context context) {
this.listFinance = listFinance;
this.context = context;
listener = (dataListener) context;
}
static class ViewHolder extends RecyclerView.ViewHolder{
private TextView Nama;
private TextView Pemasukan;
private TextView Pengeluaran;
private TextView Waktu;
private LinearLayout lst_item;
ViewHolder(View itemView) {
super(itemView);
Nama = itemView.findViewById(R.id.tbl_nama);
Pemasukan = itemView.findViewById(R.id.tbl_pemasukan);
Pengeluaran = itemView.findViewById(R.id.tbl_pengeluaran);
Waktu = itemView.findViewById(R.id.tbl_waktu);
LinearLayout tbl_header = itemView.findViewById(R.id.tbl_header);
lst_item = itemView.findViewById(R.id.lst_item);
}
}
@NotNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_design, parent, false);
return new ViewHolder(V);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final String Nama = listFinance.get(position).getNama();
final String Pemasukan = listFinance.get(position).getPemasukan();
final String Pengeluaran = listFinance.get(position).getPengeluaran();
final String Waktu = listFinance.get(position).getWaktu();
holder.Nama.setText(Nama);
holder.Pemasukan.setText(Pemasukan);
holder.Pengeluaran.setText(Pengeluaran);
holder.Waktu.setText(Waktu);
holder.lst_item.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(final View view) {
final String[] action = {"Update", "Delete"};
AlertDialog.Builder alert = new AlertDialog.Builder(view.getContext());
alert.setItems(action, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
switch (i){
case 0:
Bundle bundle = new Bundle();
bundle.putString("dataNama", listFinance.get(position).getNama());
bundle.putString("dataPemasukan", listFinance.get(position).getPemasukan());
bundle.putString("dataPengeluaran", listFinance.get(position).getPengeluaran());
bundle.putString("dataWaktu", listFinance.get(position).getWaktu());
bundle.putString("getPrimaryKey", listFinance.get(position).getId());
Intent intent = new Intent(view.getContext(), updateData.class);
intent.putExtras(bundle);
context.startActivity(intent);
break;
case 1:
listener.onDeleteData(listFinance.get(position), position);
break;
}
}
});
alert.create();
alert.show();
return true;
}
});
}
@Override
public int getItemCount() {
return listFinance.size();
}
}
MainActivity.java
package com.kuplay.storingdata.ui;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.widget.Toast;
import com.firebase.ui.auth.AuthUI;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.kuplay.storingdata.Fragment.input.InputFragment;
import com.kuplay.storingdata.R;
import androidx.annotation.NonNull;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
public FirebaseAuth auth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_input, R.id.nav_data, R.id.nav_cashflow)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.logout:
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
Toast.makeText(MainActivity.this, "Logout Berhasil", Toast.LENGTH_SHORT).show();
Intent home = new Intent(MainActivity.this, StartActivity.class);
startActivity(home);
finish();
}
});
return true;
}
return false;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
}
Please somebody help me to solve this error ;(