您将像下面那样更改
第一个用户在其他活动中提供输入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();
您将像下面那样更改