2017-02-02 11 views
0

データベースから+削除を追加するブックマークに問題があります。お気に入りのアイコンをクリックしてブックマークを削除するとブックマークを追加することができます。ブックマークを追加してブックマークを削除すると同じアイコンをクリックすると、それは持っていないページ。ブックマーク項目の追加/削除はできません。

SchoolDetailsクラス

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クラス

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

私のインターフェース

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

Bookmarkitemクラス

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

私はADDは/それはokです初めて削除のためにクリックして、二度目の次のエラーをクリックして、この問題を解決することができる方法を

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) 

来ました?

答えて

0

あなたのbookmark.idは一意ではないようです。同じIDを2回追加していないことを確認するか、別のIDを一意のIDとして使用してください。

関連する問題