0

I am having issue on bookmark to add + Delete from database.I am able to add bookmark when click the favourite icon and delete bookmark also.The main issue is ,when i add bookmark and click the same icon to unbookmark at the same page it is not having.

SchoolDetails class

public class SchoolDetails extends AppCompatActivity implements DatabaseUpdatedListener {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    Boolean isStarFilled = false;
    DatabaseHelper db;
    OurSchool ourSchool;
    private Menu menu;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_school_details);

        ourSchool = (OurSchool) getIntent().getSerializableExtra("school");

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(ourSchool.getSchoolName());


        db = new DatabaseHelper(this);
        db.databaseUpdatedListener = this;

        Toast.makeText(this, ourSchool.getSchoolName(), Toast.LENGTH_SHORT).show();

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.fav_school, menu);
        this.menu = menu;
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.star_School:
                if (!isStarFilled) {
                    Bookmarkitem bookmarkitem = new Bookmarkitem();
                    bookmarkitem.setBookmarkID(ourSchool.getSchoolId());
                    bookmarkitem.setName(ourSchool.getSchoolName());
                    bookmarkitem.setLogo(ourSchool.getSchoolLogo());
                    bookmarkitem.setAddress(ourSchool.getSchoolAddress());

                    bookmarkitem.setEmail(ourSchool.getSchoolEmail());
                    bookmarkitem.setCountry(ourSchool.getSchoolCountry());
                    bookmarkitem.setPhone(ourSchool.getSchoolPhone());
                    bookmarkitem.setWebsite(ourSchool.getSchoolWebsite());

                    bookmarkitem.setInstitution_type(ourSchool.getSchoolType());
                    bookmarkitem.setEstablishment_date(ourSchool.getEstDate());
                    bookmarkitem.setAdmission_open_from(ourSchool.getAdmissinOpenDate());
                    bookmarkitem.setAdmission_open_to(ourSchool.getAdmissionEndDate());

                    bookmarkitem.setLatitude(ourSchool.getLatitude() + "");
                    bookmarkitem.setLongitude(ourSchool.getLongitude() + "");

                    item.setIcon(getResources().getDrawable(R.mipmap.starfilled));

                    db.addSchoolBookmark(bookmarkitem, item);


                }
                else {
                    if (db.removeBookmarkItem(ourSchool.getSchoolId() + "")) {
                        Toast.makeText(this, "Successfully Deleted", Toast.LENGTH_SHORT).show();
                        item.setIcon(getResources().getDrawable(R.drawable.star));

                    } else {

                        Toast.makeText(this, "Not Successfully Deleted", Toast.LENGTH_SHORT).show();
                    }
                }


                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        List<Bookmarkitem> bookmarkitems = db.getAllSchoolBookmark();
        if (bookmarkitems.size() != 0) {
            for (Bookmarkitem bookmarkitem : bookmarkitems) {
                if (bookmarkitem.getBookmarkID() == ourSchool.getSchoolId()) {
                    isStarFilled = true;
                    break;
                } else isStarFilled = false;
            }
            if (isStarFilled) {
                menu.getItem(0).setIcon(getResources().getDrawable(R.mipmap.starfilled));
            }
//            else if (isStarFilled.booleanValue()==true){
//                delete();
//                menu.getItem(0).setIcon(getResources().getDrawable(R.mipmap.star));
//            }
        }
        return true;
    }


    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new About(), "ABOUT US");
        adapter.addFragment(new Admission(), "ADMISSION");
        adapter.addFragment(new FeeStructure(), "FEE");
        viewPager.setAdapter(adapter);
    }


    @Override
    public void setDatabaseSuccess(String schoolName, MenuItem item) {
        Toast.makeText(this, schoolName + "successfully added as bookmark", Toast.LENGTH_SHORT).show();
        item.setIcon(R.mipmap.starfilled);
    }

    @Override
    public void setDatabaseError(String failureMessage) {
        Toast.makeText(this, failureMessage, Toast.LENGTH_SHORT).show();
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

DatabaseHelper class

public class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseUpdatedListener databaseUpdatedListener;
    static final String DATABASE_NAME = "BookmarkDatabase";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME_BOOKMARK = "bookmark";

    //    Contact table columns name
    private static final String ID = "Id";
    private static final String NAME = "Name";
    private static final String ADDRESS = "Address";
    private static final String LOGO = "Logo";
    private static final String COUNTRY = "country";
    private static final String PHONE = "phone";
    private static final String EMAIL = "email";
    private static final String WEBSITE = "website";
    private static final String INSTITUTION_TYPE = "institution_type";
    private static final String ESTABLISHED_DATE = "establishment_date";
    private static final String ADMISSION_OPEN_FROM = "admission_open_from";
    private static final String ADMISSION_OPEN_TO = "admission_open_to";
    private static final String LATITUDE = "latitude";
    private static final String LONGITUDE = "longitude";

    String createTableBookmark = "Create table if not exists `Bookmark` (" + "`name`    TEXT," + "`location`    TEXT," + "`logo`    TEXT);";

    String CREATE_SCHOOL_BOOKMARK_TABLE = "CREATE TABLE " + TABLE_NAME_BOOKMARK + "("
            + ID + " INTEGER PRIMARY KEY, "
            + NAME + " TEXT, "
            + LOGO + " TEXT, "
            + ADDRESS + " TEXT, "
            + COUNTRY + " TEXT, "
            + PHONE + " TEXT, "
            + EMAIL + " TEXT, "
            + WEBSITE + " TEXT, "
            + INSTITUTION_TYPE + " TEXT, "
            + ESTABLISHED_DATE + " TEXT, "
            + ADMISSION_OPEN_FROM + " TEXT, "
            + ADMISSION_OPEN_TO + " TEXT, "
            + LATITUDE + " TEXT, "
            + LONGITUDE + " TEXT " + ")";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public void insertBookmarkData(Bookmarkitem bookmarkitem) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues content = new ContentValues();
        content.put("name", bookmarkitem.name);
        content.put("location", bookmarkitem.address);
        content.put("logo", bookmarkitem.logo);

        db.insert("Bookmark", null, content);
    }

    public ArrayList<Bookmarkitem> getBookmarkist() {
        String sql = "select * from Bookmark ";
        ArrayList<Bookmarkitem> bookmarklist = new ArrayList<Bookmarkitem>();

        Cursor c = getWritableDatabase().rawQuery(sql, null);
        while (c.moveToNext()) {
            Bookmarkitem info = new Bookmarkitem();
            info.name = c.getString(c.getColumnIndex("name"));
            info.address = c.getString(c.getColumnIndex("location"));
            info.logo = c.getString(c.getColumnIndex("logo"));
            bookmarklist.add(info);
        }
        c.close();
        return bookmarklist;
    }

    public Bookmarkitem getBookmarkData(String bookmarkName) {
        String sql = "select * from Bookmark  where id='" + bookmarkName + "'";

        Cursor c = getWritableDatabase().rawQuery(sql, null);
        while (c.moveToNext()) {
            Bookmarkitem info = new Bookmarkitem();
            info.name = c.getString(c.getColumnIndex("name"));
            info.address = c.getString(c.getColumnIndex("location"));
            info.logo = c.getString(c.getColumnIndex("logo"));
        }
        c.close();
        Bookmarkitem info = null;
        return info;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // TODO Auto-generated method stub
        sqLiteDatabase.execSQL(CREATE_SCHOOL_BOOKMARK_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int arg1, int arg2) {
        // TODO Auto-generated method stub


        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_BOOKMARK);
        onCreate(sqLiteDatabase);
    }

    public void addSchoolBookmark(Bookmarkitem bookmarkitem, MenuItem menuItem) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(ID, bookmarkitem.getBookmarkID());
        values.put(NAME, bookmarkitem.getName());
        values.put(LOGO, bookmarkitem.getLogo());
        values.put(ADDRESS, bookmarkitem.getAddress());

        values.put(COUNTRY, bookmarkitem.getCountry());
        values.put(PHONE, bookmarkitem.getPhone());
        values.put(EMAIL, bookmarkitem.getEmail());
        values.put(WEBSITE, bookmarkitem.getWebsite());
        values.put(INSTITUTION_TYPE, bookmarkitem.getInstitution_type());
        values.put(ESTABLISHED_DATE, bookmarkitem.getEstablishment_date());
        values.put(ADMISSION_OPEN_FROM, bookmarkitem.getAdmission_open_from());
        values.put(ADMISSION_OPEN_TO, bookmarkitem.getAdmission_open_to());

        values.put(LATITUDE, bookmarkitem.getLatitude());
        values.put(LONGITUDE, bookmarkitem.getLongitude());


        //inserting row
        if (db.insert(TABLE_NAME_BOOKMARK, null, values) != -1) {
            databaseUpdatedListener.setDatabaseSuccess(bookmarkitem.getName(), menuItem);
        } else {
            databaseUpdatedListener.setDatabaseError("Failed to Delete");
        }


        db.close();
    }

    public List<Bookmarkitem> getAllSchoolBookmark() {
        SQLiteDatabase db = this.getWritableDatabase();
        String selectQuery = "SELECT * FROM " + TABLE_NAME_BOOKMARK;
        List<Bookmarkitem> bookmarkitems = new ArrayList<>();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Bookmarkitem bookmarkitem = new Bookmarkitem();
                bookmarkitem.setBookmarkID(Integer.parseInt(cursor.getString(0)));
                bookmarkitem.setName(cursor.getString(1));
                bookmarkitem.setLogo(cursor.getString(2));
                bookmarkitem.setAddress(cursor.getString(3));

                bookmarkitem.setCountry(cursor.getString(4));
                bookmarkitem.setPhone(cursor.getString(5));
                bookmarkitem.setEmail(cursor.getString(6));
                bookmarkitem.setWebsite(cursor.getString(7));
                bookmarkitem.setInstitution_type(cursor.getString(8));
                bookmarkitem.setEstablishment_date(cursor.getString(9));
                bookmarkitem.setAdmission_open_from(cursor.getString(10));
                bookmarkitem.setAdmission_open_to(cursor.getString(11));
                bookmarkitem.setLatitude(cursor.getString(12));
                bookmarkitem.setLongitude(cursor.getString(13));

                bookmarkitems.add(bookmarkitem);
            } while (cursor.moveToNext());
        }
        return bookmarkitems;
    }

    public boolean removeBookmarkItem(String id) {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(TABLE_NAME_BOOKMARK, ID + "=" + id, null) > 0;
    }

    public Bookmarkitem getBoomarkDetailByID(String id) {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = null;
        String empName = "";
        try {
            Bookmarkitem bookmarkitem = new Bookmarkitem();
            cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME_BOOKMARK + " WHERE " + ID + "=?", new String[]{id + ""});
            if (cursor.getCount() > 0) {

                cursor.moveToFirst();
                bookmarkitem.setBookmarkID(Integer.parseInt(cursor.getString(0)));
                bookmarkitem.setName(cursor.getString(1));
                bookmarkitem.setLogo(cursor.getString(2));
                bookmarkitem.setAddress(cursor.getString(3));

                bookmarkitem.setCountry(cursor.getString(4));
                bookmarkitem.setPhone(cursor.getString(5));
                bookmarkitem.setEmail(cursor.getString(6));
                bookmarkitem.setWebsite(cursor.getString(7));
                bookmarkitem.setInstitution_type(cursor.getString(8));
                bookmarkitem.setEstablishment_date(cursor.getString(9));
                bookmarkitem.setAdmission_open_from(cursor.getString(10));
                bookmarkitem.setAdmission_open_to(cursor.getString(11));
                bookmarkitem.setLatitude(cursor.getString(12));
                bookmarkitem.setLongitude(cursor.getString(13));
            }

            return bookmarkitem;
        } finally {

            cursor.close();
        }
    }
}

my interface

public interface DatabaseUpdatedListener {
    void setDatabaseSuccess(String schoolName, MenuItem item);
    void setDatabaseError(String failureMessage);
}

Bookmarkitem class

public class Bookmarkitem implements Serializable{

    public int bookmarkID; //school or college or university id
    public String name;
    public String address;
    public String logo;
    public String country;

    public String phone;
    public String email;
    public String website;
    public String institution_type;
    public String establishment_date;
    public String admission_open_from;
    public String admission_open_to;
    public String latitude;
    public String longitude;


    public int getBookmarkID() {
        return bookmarkID;
    }

    public void setBookmarkID(int bookmarkID) {
        this.bookmarkID = bookmarkID;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public String getLogo() {
        return logo;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setLogo(String logo) {
        this.logo = logo;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    public String getInstitution_type() {
        return institution_type;
    }

    public void setInstitution_type(String institution_type) {
        this.institution_type = institution_type;
    }

    public String getEstablishment_date() {
        return establishment_date;
    }

    public void setEstablishment_date(String establishment_date) {
        this.establishment_date = establishment_date;
    }

    public String getAdmission_open_from() {
        return admission_open_from;
    }

    public void setAdmission_open_from(String admission_open_from) {
        this.admission_open_from = admission_open_from;
    }

    public String getAdmission_open_to() {
        return admission_open_to;
    }

    public void setAdmission_open_to(String admission_open_to) {
        this.admission_open_to = admission_open_to;
    }

    public String getLatitude() {
        return latitude;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }
}

when i click for add/delete for first time it is ok,and for second time click the following error came

E/SQLiteDatabase: Error inserting admission_open_from=27-12-2016 longitude=85.2865 website=www.soanitech.com phone=11144441 email=merameah@gmail.com establishment_date=27-12-2016 Id=111 institution_type=Public Address=Koteshwor country=Nepal admission_open_to=27-12-2016 Logo=http://www.myeducationhunt.com/pjQXrVjBPggfOilRxpze.jpeg latitude=27.6794 Name=Sir Ramesh Bista
                  android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: bookmark.Id (code 1555)
                      at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                      at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                      at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                      at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                      at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1474)
                      at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
                      at com.example.user.educationhunt.database.DatabaseHelper.addSchoolBookmark(DatabaseHelper.java:143)
                      at com.example.user.educationhunt.SchoolDetails.onOptionsItemSelected(SchoolDetails.java:102)

how can this issue be solved??

seon
  • 1,050
  • 2
  • 13
  • 27

1 Answers1

0

It seems your bookmark.id is not unique. Make sure you are not adding the same id twice or use something else as a unique id.

Amit Patel
  • 1,795
  • 16
  • 20