سلام و عرض ادب خدمت شما
وقتی اطلاعات در میخواهم در RecyclerView نمایش دهم اپ کرش میکند با این ارور
ممنون میشم راهنمایی کنید
2021-09-04 02:13:35.826 4321-4321/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 4321
android.content.res.Resources$NotFoundException: String resource ID #0xad
at android.content.res.Resources.getText(Resources.java:335)
at android.widget.TextView.setText(TextView.java:5024)
at com.example.myapplication.main.StudentAdapter$StudentViewHolder.bind(StudentAdapter.java:55)
at com.example.myapplication.main.StudentAdapter.onBindViewHolder(StudentAdapter.java:29)
at com.example.myapplication.main.StudentAdapter.onBindViewHolder(StudentAdapter.java:16)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7254)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:536)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:727)
at android.view.View.layout(View.java:17638)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6338)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:621)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
at android.os.Handler.handleCallback(Handler.java:751)
2021-09-04 02:13:35.826 4321-4321/com.example.myapplication E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6198)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
MainActivity code
package com.example.myapplication.main;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import com.example.myapplication.R;
import com.example.myapplication.model.ApiServiceProvider;
import com.example.myapplication.model.AppDatabase;
import com.example.myapplication.model.Student;
import com.example.myapplication.model.StudentRepository;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainViewModel model = new ViewModelProvider(this,
new MainViewModelFactory(
new StudentRepository(
ApiServiceProvider.getApiService(),
AppDatabase.getAppDatabase(getApplicationContext())
.studentDao()))).get(MainViewModel.class);
model.getStudents().observe(this,students->{
RecyclerView recyclerView =findViewById(R.id.rv_main);
recyclerView.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL,false));
StudentAdapter adapter = new StudentAdapter(students);
recyclerView.setAdapter(adapter);
Log.i(TAG, "onCreate: ");
});
model.getError().observe(this,error->{
Log.e(TAG, "onCreate: ");
});
}
}
StudentAdapter Code
package com.example.myapplication.main;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
import com.example.myapplication.model.Student;
import java.util.List;
public class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.StudentViewHolder> {
private List<Student> students;
StudentAdapter(List<Student> students){
this.students=students;
}
@NonNull
@Override
public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new StudentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_student,parent,false));
}
@Override
public void onBindViewHolder(@NonNull StudentViewHolder holder, int position) {
holder.bind(students.get(position));
}
@Override
public int getItemCount() {
return students.size();
}
public class StudentViewHolder extends RecyclerView.ViewHolder{
private TextView firstCharTv;
private TextView fullNameTv;
private TextView courseTv;
private TextView scoreTv;
public StudentViewHolder(@NonNull View itemView) {
super(itemView);
firstCharTv=itemView.findViewById(R.id.item_student_firstCharacter);
fullNameTv=itemView.findViewById(R.id.item_student_fullName);
courseTv=itemView.findViewById(R.id.item_student_course);
scoreTv=itemView.findViewById(R.id.item_student_score);
}
public void bind(Student student){
firstCharTv.setText(student.getFirstName().substring(0,1));
fullNameTv.setText(student.getFirstName()+" "+student.getLastName());
courseTv.setText(student.getCourse());
scoreTv.setText(student.getScore());
}
}
}
سلام وقتت بخیر پارسا جان
ارور مربوط میشه به کد زیر و به این دلیل هست ما نمیتونیم integer رو به setText بدیم تا برامون روی ویو ست کنه.
scoreTv.setText(student.getScore());
که باید بنویسید
scoreTv.setText(String.valueOf(student.getScore()));
و ادپتر کامل شما خواهد شد
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.StudentViewHolder> {
private List<Student> students = new ArrayList<>();
public void addStudents(List<Student> students) {
this.students.clear();
this.students.addAll(students);
notifyDataSetChanged();
}
@NonNull
@Override
public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new StudentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_student, parent, false));
}
@Override
public void onBindViewHolder(@NonNull StudentViewHolder holder, int position) {
holder.bind(students.get(position));
}
@Override
public int getItemCount() {
return students.size();
}
public static class StudentViewHolder extends RecyclerView.ViewHolder {
private TextView fullNameTv;
private TextView courseTitleTv;
private TextView scoreTv;
private TextView firstCharacterTv;
public StudentViewHolder(@NonNull View itemView) {
super(itemView);
fullNameTv = itemView.findViewById(R.id.tv_student_fullName);
courseTitleTv = itemView.findViewById(R.id.tv_student_course);
scoreTv = itemView.findViewById(R.id.tv_student_score);
firstCharacterTv = itemView.findViewById(R.id.tv_student_firstCharacter);
}
public void bind(Student student) {
fullNameTv.setText(student.getFirstName() + " " + student.getLastName());
courseTitleTv.setText(student.getCourse());
scoreTv.setText(String.valueOf(student.getScore()));
firstCharacterTv.setText(student.getFirstName().substring(0, 1));
}
}
}