2017-02-02 1 views
0

Ich habe Problem auf Lesezeichen, um + Datenbank löschen hinzuzufügen. Ich bin in der Lage, Lesezeichen hinzuzufügen, wenn Sie auf das Favoritensymbol klicken und Lesezeichen auch löschen. Das Hauptproblem ist, wenn ich Lesezeichen hinzufügen und auf dasselbe Symbol klicken, um gleichzeitig zu entfernen Seite hat es nicht.Lesezeichen hinzufügen/entfernen nicht möglich?

SchoolDetails Klasse

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 Klasse

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(); 
     } 
    } 
} 

meine Schnittstelle

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

Bookmarkitem Klasse

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; 
    } 
} 

, wenn ich für Add klicken/Löschen für das erste Mal ist in Ordnung, und für die zweite Mal der folgenden Fehler klicken kamen

E/SQLiteDatabase: Error inserting admission_open_from=27-12-2016 longitude=85.2865 website=www.soanitech.com phone=11144441 [email protected] 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) 

wie dieses Problem gelöst werden kann ??

Antwort

0

Es scheint, dass Ihre bookmark.id nicht eindeutig ist. Stellen Sie sicher, dass Sie nicht dieselbe ID zweimal hinzufügen oder etwas anderes als eindeutige ID verwenden.