0

When I open FavActivity, then App crashes. Information from crash reports.

Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.database.sqlite.SQLiteOpenHelper.getReadableDatabase()' on a null object reference

com.dic.FavActivity.loadData (FavActivity.java:9)

MainActivity

        RecyclerView recyclerView  = (RecyclerView) findViewById(R.id.recyclerViewId);
        itemList = new ArrayList<>();
        itemAdapter = new ItemAdapter(this,itemList);
        itemList.add(new NamesModel("0","name1","meaning","0"));
        itemList.add(new NamesModel("1","name2","meaning","0"));
        itemList.add(new NamesModel("2","name3","meaning","0"));
        itemList.add(new NamesModel("3","name4","meaning","0"));

        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setAdapter(duaNamesAdapter);
        recyclerView.setLayoutManager(linearLayoutManager);

ItemAdapter

Context context;
    List<ItemModel> itemList;
    private FavDB favDB;

    public ItemAdapter(Context context, List<ItemModel> itemList) {
        this.context = context;
        this.itemList= itemList;
    }

    @NonNull
    @Override
    public NamesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        FavDB = new FavDB(context);
        
        //create table on first
        SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
        boolean firstStart = prefs.getBoolean("firstStart", true);
        if (firstStart) {
            createTableOnFirstStart();
        }
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.names_item,parent, false );
        return new DuaNamesViewHolder(view);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull NamesViewHolder holder, int position) {
        final NamesModel namesModel = itemList.get(position);
        readCursorData(namesModel, holder);

        holder.name.setText(itemList.get(position).getName());
        holder.meaning.setText(itemList.get(position).getMeaning());    
    }

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

    public class NamesViewHolder extends RecyclerView.ViewHolder{
        TextView name,meaning;
        ImageView addFav;

        public NamesViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_name);
            meaning = itemView.findViewById(R.id.tv_meaning);
            addFav = itemView.findViewById(R.id.addFav);     

            addFav.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAbsoluteAdapterPosition();
                    ItemModel itemModel = itemList.get(position);

                    if (itemModel .getFavStatus().equals("0")) {
                        itemModel .setFavStatus("1");
                        favDB.insertIntoTheDatabase(itemModel.getId(), itemModel.getName(), itemModel.getMeaning(), itemModel.getFavStatus());
                        addFav.setBackgroundResource(R.drawable.baseline_favorite_24);
                    }else {
                        itemModel.setFavStatus("0");
                        favDB.remove_fav(itemModel.getId());
                        addFav.setBackgroundResource(R.drawable.baseline_favorite_border_24);
                    }
                }
            });

        }
    }

    private void createTableOnFirstStart() {
        favDB.insertEmpty();

        SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("firstStart", false);
        editor.apply();
    }

    private void readCursorData(@NonNull ItemModel itemModel, NamesViewHolder viewHolder) {
        Cursor cursor = favDB.read_all_data(itemModel.getId());
        SQLiteDatabase db = favDB.getReadableDatabase();
        try {
            while (cursor.moveToNext()) {
                String status = cursor.getString(cursor.getColumnIndex(FavDB.STATUS));
                itemModel.setFavStatus(status);

                //check fav status
                if (status != null && status.equals("1")) {
                    viewHolder.addFav.setBackgroundResource(R.drawable.baseline_favorite_24);
                } else if (status != null && status.equals("0")) {
                    viewHolder.addFav.setBackgroundResource(R.drawable.baseline_favorite_border_24);
                }
            }
        } finally {
            if (cursor != null && cursor.isClosed())
                cursor.close();
        }

    }

FavActivity

RecyclerView recyclerView  = (RecyclerView) findViewById(R.id.recyclerViewId);
       
        linearLayoutManager = new LinearLayoutManager(this);       
        recyclerView.setLayoutManager(linearLayoutManager);
       
        loadData();
}

private void loadData() {
        if (favItemlList != null) {
            favItemlList.clear();
        }
        db = favDB.getReadableDatabase();
        cursor = favDB.select_all_favorite_list();
        try {
            while (cursor.moveToNext()) {
                
       String id = cursor.getString(cursor.getColumnIndex(FavDB.ID));               
       String name = cursor.getString(cursor.getColumnIndex(FavDB.NAME));           
       String meaning = cursor.getString(cursor.getColumnIndex(FavDB.MEANING));
                
                FavModel favModel = new FavModel(id, name, meaning);
                favItemlList.add(favModel);
            }
        } finally {
            if (cursor != null && cursor.isClosed())
                cursor.close();
        }

        favItemlList = new ArrayList<>();
        favAdapter = new FavAdapter(this, favItemlList);
        recyclerView.setAdapter(favAdapter);

    }

FavAdapter

private Context context;
    private List<FavModel> favItemList;
    private FavDB favDB;
    private DatabaseReference refLike;

    public FavAdapter(Context context, List<FavModel> favItemList) {
        this.context = context;
        this.favItemList = favItemList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.name.setText(favItemList.get(position).getName());
        holder.meaning.setText(favItemList.get(position).getMeaning());
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView name,meaning;
        ImageView addFav;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);            
            name = itemView.findViewById(R.id.tv_Name);
            meaning = itemView.findViewById(R.id.tv_Meaning);          
            addFav = itemView.findViewById(R.id.addFav);

            refLike = FirebaseDatabase.getInstance().getReference().child("likes");
            //remove from fav after click
            addFav.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAbsoluteAdapterPosition();
                    final FavModel favItem = favItemList.get(position);
                    final DatabaseReference upvotesRefLike = refLike.child(favItemList.get(position).getId());
                    favDB.remove_fav(favItem.getId());
                    removeItem(position);
                

                    upvotesRefLike.runTransaction(new Transaction.Handler() {
                        @NonNull
                        @Override
                        public Transaction.Result doTransaction(@NonNull final MutableData mutableData) {
                            try {
                                Integer currentValue = mutableData.getValue(Integer.class);
                                if (currentValue == null) {
                                    mutableData.setValue(1);
                                } else {
                                    mutableData.setValue(currentValue - 1);
                                }
                            } catch (Exception e) {
                                throw e;
                            }
                            return Transaction.success(mutableData);
                        }

                        @Override
                        public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
                            System.out.println("Transaction completed");
                        }
                    });
                }
            });      
    }

    private void removeItem(int position) {
        favItemList.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position,favItemList.size());
    }
}

FavDB

public class FavDB extends SQLiteOpenHelper {

    private static int DB_VERSION = 1;
    private static String DATABASE_NAME = "DuaNamesDB";
    private static String TABLE_NAME = "favoriteTable";
    public static String ID = "id";
    public static String NAME = "itemName";
    public static String MEANING = "itemMeaning";   
    public static String STATUS = "fStatus";

    // dont forget write this spaces
    private static String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
            + ID + " TEXT," + NAME + " TEXT," + MEANING+ " TEXT," + STATUS+" TEXT)";

    public FavDB(Context context) { super(context,DATABASE_NAME,null,DB_VERSION);}

    @Override
    public void onCreate(@NonNull SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    // create empty table
    public void insertEmpty() {
        try (SQLiteDatabase db = this.getWritableDatabase()) {
            ContentValues cv = new ContentValues();
            // enter your value
            for (int x = 1; x < 25; x++) {
                cv.put(ID, x);
                cv.put(STATUS, "0");

                db.insert(TABLE_NAME, null, cv);
            }
        }
    }

    // insert data into database
    public void insertIntoTheDatabase(String id, String item_name, String item_meaning, String fav_status) {
        SQLiteDatabase db;
        db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(ID, id);
        cv.put(NAME, item_name);
        cv.put(ARB, item_meaning);
        cv.put(STATUS, fav_status);
        db.insert(TABLE_NAME,null, cv);
        Log.d("FavDB Status", item_name + ", favstatus - "+fav_status+" - . " + cv);
    }

    // read all data
    public Cursor read_all_data(String id) {
        SQLiteDatabase db = this.getReadableDatabase();
        String sql = "select * from " + TABLE_NAME + " where " + ID+"="+id+"";
        return db.rawQuery(sql,null,null);
    }

    // remove line from database
    public void remove_fav(@NonNull String id) {
        SQLiteDatabase db = this.getWritableDatabase();
        String sql = "UPDATE " + TABLE_NAME + " SET  "+ STATUS+" ='0' WHERE "+ID+"="+id+"";
        db.execSQL(sql);
        Log.d("remove", id.toString());

    }

    // select all favorite list

    public Cursor select_all_favorite_list() {
        SQLiteDatabase db = this.getReadableDatabase();
        String sql = "SELECT * FROM "+TABLE_NAME+" WHERE "+STATUS+" ='1'";
        return db.rawQuery(sql,null,null);
    }


}

** Please anyone help me. Thanks In advance.**

Fatal Exception: java.lang.RuntimeException Unable to start activity ComponentInfo{com.dic/com.dic.FavActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.database.sqlite.SQLiteOpenHelper.getReadableDatabase()' on a null object reference

Alex
  • 1
  • 4

0 Answers0