Android 无法添加/删除书签项目?
我在数据库中添加和删除书签时遇到问题。我可以在单击收藏夹图标时添加书签,也可以删除书签。主要问题是,当我添加书签并单击同一图标以在没有书签的页面上取消书签标记时 学校详情课程Android 无法添加/删除书签项目?,android,bookmarks,Android,Bookmarks,我在数据库中添加和删除书签时遇到问题。我可以在单击收藏夹图标时添加书签,也可以删除书签。主要问题是,当我添加书签并单击同一图标以在没有书签的页面上取消书签标记时 学校详情课程 public class SchoolDetails extends AppCompatActivity implements DatabaseUpdatedListener { private Toolbar toolbar; private TabLayout tabLayout; priva
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);
}
}
}
书签项目类
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;
}
}
当我第一次单击添加/删除时,它是确定的,第二次单击时出现以下错误
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)
如何解决此问题???您的bookmark.id似乎不是唯一的。确保您没有两次添加相同的id或使用其他内容作为唯一id
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;
}
}
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)