Issue
im trying to get Highscores from a File and display them in a RecyclerView. But im getting the following Error:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.ausbaustufe1.CustomAdapter.onBindViewHolder(CustomAdapter.java:46)
at com.example.ausbaustufe1.CustomAdapter.onBindViewHolder(CustomAdapter.java:16)
I know that my scoreItems in
CustomAdapter adapter = new CustomAdapter(scoreItems);
arent empty. I dont know what i am doing wrong. I´m new in the Android World :)
Thanks for helping.
My files: score_activity.java
public class score_activty extends AppCompatActivity {
ArrayList<ScoreItem> scoreItems;
FileIOScores io = new FileIOScores(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_score_activty);
RecyclerView rvItems = findViewById(R.id.recview);
scoreItems = io.readScores("file1.txt");
Log.v("mytag",scoreItems.toString());
CustomAdapter adapter = new CustomAdapter(scoreItems);
Log.v("mytag",String.valueOf(adapter.getItemCount()));
rvItems.setLayoutManager(new LinearLayoutManager(this));
rvItems.setAdapter(adapter);
}
}
CustomAdapter.java
package com.example.ausbaustufe1;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private String[] localDataSet;
private TextView textView;
private List<ScoreItem> scores;
public CustomAdapter(ArrayList<ScoreItem> scoreItems) {
this.scores = scoreItems;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the custom layout
View scoreView = inflater.inflate(R.layout.recycler_style, parent, false);
// Return a new holder instance
ViewHolder viewHolder = new ViewHolder(scoreView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ScoreItem scoreItem = scores.get(position);
// Set item views based on your views and data model
TextView textView = holder.textView;
textView.setText(scoreItem.toString());
}
@Override
public int getItemCount() {
return scores.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView;
private List<ScoreItem> scores;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
textView = (TextView) view.findViewById(R.id.textView);
}
public TextView getTextView() {
return textView;
}
public void CustomAdapter(List<ScoreItem> scores){
this.scores = scores;
}
}
}
activity_score_activity.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=".score_activty">
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/clr"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-2dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
/>
</LinearLayout>
recycler_style.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">
<TextView
android:layout_width="@+id/textView"
android:layout_height="wrap_content"
/>
</LinearLayout>
Solution
You mistype the recycler_style.xml
, the id must be specified in the android:id
property and not in android:layout_width
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Answered By - Fates
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.