在Recycler视图中单击+/-按钮时,正在使用学生出勤管理器.app时崩溃

问题描述 投票:0回答:1

第一个用户在其他活动中提供输入sub,classAttended,Total类,然后我将其存储在数据库中,然后在用户单击+/-时我想要的列表帮助下在回收器视图上显示数据,然后该主题出席者增加1并且总班级增加了1,但是当我点击+/- btn]时我的应用崩溃了

RecVIewAdapter

public class recViewAdapter extends RecyclerView.Adapter<recViewAdapter.viewHolder> {

private Context mContext;
MyHelper helper = new MyHelper(mContext);
List<SubjectModel> list;

public recViewAdapter(List<SubjectModel> list) {
    this.list = list;
    notifyDataSetChanged();
}

@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_recview, parent, false);
    return new viewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final viewHolder holder, final int position) {

    holder.subject.setText(list.get(position).getSubject());
    holder.classesAttended.setText(list.get(position).getClassesAttended());
    holder.totalClasses.setText("/" + list.get(position).getTotalClasses());
    String result = String.valueOf(Integer.valueOf(list.get(position).getClassesAttended()) * 100 / Integer.valueOf(list.get(position).getTotalClasses()));
    holder.attendancePercentage.setText(result + "%");

    holder.presentBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int cl_attended=0,t_classes=0;
            Toast.makeText(v.getContext(), "present clicked", Toast.LENGTH_SHORT).show();
            cl_attended = Integer.parseInt(String.valueOf(list.get(position).getClassesAttended()));
            t_classes = Integer.parseInt(String.valueOf(list.get(position).getTotalClasses()));
            cl_attended++;
            t_classes++;
            helper.updateData(list.get(position).getId(),String.valueOf(cl_attended),String.valueOf(t_classes));
            notifyDataSetChanged();
        }
    });

    holder.absentBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "absent clicked", Toast.LENGTH_SHORT).show(); first solve present btn isssue
        }
    });

}

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

public class viewHolder extends RecyclerView.ViewHolder {

    private TextView subject, classesAttended, totalClasses, attendancePercentage;
    private ImageView presentBtn, absentBtn;

    public viewHolder(@NonNull final View itemView) {
        super(itemView);

        subject = itemView.findViewById(R.id.subject);
        classesAttended = itemView.findViewById(R.id.class_attended);
        totalClasses = itemView.findViewById(R.id.total_clases);
        attendancePercentage = itemView.findViewById(R.id.attendance_percentage);
        presentBtn = itemView.findViewById(R.id.present);
        absentBtn = itemView.findViewById(R.id.absent);

    }
}

}

Databasehelper

public class MyHelper extends SQLiteOpenHelper {

private static final String dbname = "mydb";
private static final int version = 1;
private Context context;

public  MyHelper(Context context){
    super(context,dbname,null,version);

}
@Override
public void onCreate(SQLiteDatabase db) {

    String query="CREATE TABLE IF NOT EXISTS STUDENTS_DETAILS (ID INTEGER PRIMARY KEY AUTOINCREMENT, SUB_NAME TEXT ,CLASS_ATTENDED INT ,TOTAL_CLASSES INT)";
    db.execSQL(query);

}

public boolean insertData(String subject, String  class_attended, String total_classes){
    SQLiteDatabase database=this.getWritableDatabase();
    ContentValues values =new ContentValues();
    values.put("SUB_NAME",subject);
    values.put("CLASS_ATTENDED",class_attended);
    values.put("TOTAL_CLASSES",total_classes);
    long result =database.insert("STUDENTS_DETAILS",null,values);
    if(result == -1) return  false;
    else return true;
}

public Cursor getData(){
    String query ="SELECT * FROM STUDENTS_DETAILS";
    SQLiteDatabase database =this.getReadableDatabase();
    Cursor cursor = null;
    if(database != null){
        cursor =database.rawQuery(query,null);
    }
    return cursor;
};

public void updateData(String id,String classAttended,String totalClasses){

    SQLiteDatabase database =this.getWritableDatabase();
    ContentValues values =new ContentValues();
    values.put("CLASS_ATTENDED",classAttended);
    values.put("TOTAL_CLASSES",totalClasses);
    long result =database.update("STUDENTS_DETAILS",values,"ID=?",new String[]{id} );
    if(result == -1){
        Toast.makeText(context, "Succesfully Updated", Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(context, "failed in update data", Toast.LENGTH_SHORT).show();
    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

我的清单项目*

image of my list item +/- is present/absent btn and 25/30 is classAttended/totalClasses

***我的应用程序在我单击+ btn Error-*时崩溃。

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.attendancemanager, PID: 17801
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at android.widget.Toast.<init>(Toast.java:121)
    at android.widget.Toast.makeText(Toast.java:286)
    at android.widget.Toast.makeText(Toast.java:276)
    at com.example.attendancemanager.recViewAdapter$1.onClick(recViewAdapter.java:51)
    at android.view.View.performClick(View.java:7256)
    at android.view.View.performClickInternal(View.java:7218)
    at android.view.View.access$3800(View.java:824)
    at android.view.View$PerformClick.run(View.java:27719)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:228)
    at android.app.ActivityThread.main(ActivityThread.java:7782)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)

I / Process:正在发送信号。 PID:17801 SIG:9进程17801终止。

第一个用户在其他活动中提供输入sub,classAttended,Total类,然后我将其存储在数据库中,然后在用户单击+/-时,我想要的列表帮助我在回收器视图上显示数据,然后单击...,>

您将像下面那样更改

Toast.makeText(v.getContext(), "absent clicked", Toast.LENGTH_SHORT).show();

to

Toast.makeText(mContext, "absent clicked", Toast.LENGTH_SHORT).show();
    
java android android-recyclerview android-sqlite recycler-adapter
1个回答
0
投票

您将像下面那样更改

© www.soinside.com 2019 - 2024. All rights reserved.