2017-01-09 1 views
2

안녕하세요. 데이터베이스에서 항목을 삭제하는 동안 문제가 생겼습니다. 한 가지 활동으로 학교 목록이 있습니다. 내 스크린 샷은 [[Schools.java] [1]] [1 ]데이터베이스 삭제 기능이 작동하지 않습니다.

schooldetails.class의 맨 위에는 학교를 북마크하는 별표 아이콘이 있습니다. 북마크 아이콘을 클릭하면 아이콘이 채워진 것으로 변경되고 각각의 학교는 내 북마크 클래스에 저장됩니다.이 모든 것이 잘 작동합니다. 이제 채워진 별 아이콘을 다시 클릭하면 북마크 삭제 기능을 구현하려고합니다. 북마크 된 클래스를 북마크 클래스에서 삭제하고 싶습니다. 이것은 Schooldetails 클래스에서 수행 한 작업입니다.

package com.example.user.educationhunt; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.Toast; 

import com.example.user.educationhunt.database.DatabaseHelper; 
import com.example.user.educationhunt.fragment.About; 
import com.example.user.educationhunt.fragment.Admission; 
import com.example.user.educationhunt.fragment.FeeStructure; 
import com.example.user.educationhunt.listner.DatabaseUpdatedListener; 
import com.example.user.educationhunt.pojos.Bookmarkitem; 
import com.example.user.educationhunt.pojos.OurSchool; 

import java.util.ArrayList; 
import java.util.List; 

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: 
       Bookmarkitem bookmarkitem = new Bookmarkitem(); 
       bookmarkitem.setBookmarkID(ourSchool.getSchoolId()); 
       bookmarkitem.setName(ourSchool.getSchoolName()); 
       bookmarkitem.setLogo(ourSchool.getSchoolLogo()); 
       bookmarkitem.setAddress(ourSchool.getSchoolAddress()); 
       db.addSchoolBookmark(bookmarkitem, item); 
       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; 
    } 

    public void delete(){ 
     List<Bookmarkitem> bookmarkitems = db.getAllSchoolBookmark(); 
     db.removeBookmarkItem(ourSchool.getSchoolId()); } 

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

그리고이 목록 내 북마크 클래스 items.I가 각각 class.This의 세부 사항을로드 할에 클릭에서 내 데이터베이스 클래스

이 외에도
package com.example.user.educationhunt.database; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.view.MenuItem; 

import com.example.user.educationhunt.listner.DatabaseUpdatedListener; 
import com.example.user.educationhunt.pojos.Bookmarkitem; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by user on 11/22/2016. 
*/ 
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 LOGO = "Logo"; 
    private static final String LOCATION = "Location"; 

    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, " 
      + LOCATION + " 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(LOCATION, bookmarkitem.getAddress()); 

     //inserting row 
     if (db.insert(TABLE_NAME_BOOKMARK, null, values) != -1) { 
      databaseUpdatedListener.setDatabaseSuccess(bookmarkitem.getName(), menuItem); 
     } else { 
      databaseUpdatedListener.setDatabaseError("Failed to insert"); 
     } 
     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)); 
       bookmarkitems.add(bookmarkitem); 
      } while (cursor.moveToNext()); 
     } 
     return bookmarkitems; 
    } 

    public void removeBookmarkItem(int sID) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.execSQL("DELETE FROM " + TABLE_NAME_BOOKMARK + " WHERE " + ID + "= '" + sID + "'"); 
     db.close(); 
    } 
} 

입니다 내 북마크 claass입니다

package com.example.user.educationhunt; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.example.user.educationhunt.adapter.BookmarkAdapter; 
import com.example.user.educationhunt.database.DatabaseHelper; 
import com.example.user.educationhunt.pojos.Bookmarkitem; 

import java.util.ArrayList; 
import java.util.List; 

public class Bookmark extends AppCompatActivity { 
    private List<Bookmarkitem> ourBookmarkListItems = new ArrayList<Bookmarkitem>(); 
    private ListView listView; 
    private BookmarkAdapter adapter; 
    DatabaseHelper dbhelper; 
    private Toolbar toolbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_bookmark); 
     dbhelper = new DatabaseHelper(this); 

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

     toolbar.setPadding(0, getStatusBarHeight(), 0, 0); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle("Bookmark"); 

     List<Bookmarkitem> bookmarkedSchools = dbhelper.getAllSchoolBookmark(); 

     listView = (ListView) findViewById(R.id.list_bookmarked); 
     if (bookmarkedSchools.size() != 0) { 
      adapter = new BookmarkAdapter(this, bookmarkedSchools); 
      listView.setAdapter(adapter); 
     } else { 
      Toast.makeText(this, "You have no bookmark yet.", Toast.LENGTH_SHORT).show(); 
     } 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       startActivity(new Intent(Bookmark.this,SchoolDetails.class)); 
      } 
     }); 

      } 

    public int getStatusBarHeight() { 
     int result = 0; 
     int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 
     if (resourceId > 0) { 
      result = getResources().getDimensionPixelSize(resourceId); 
     } 
     return result; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

아무런 오류나 적절한 결과가 나타나지 않습니다. 누구든지 도와주세요

+0

는 DatabaseHelper' 클래스는 데이터베이스 값으로 당신은 점점 가치와 crossmatch을 확인하는'에서'방법 당신의'removeBookmarkItem (INT SID)에 로그를 사용합니다. 'Log.e ("DB", "sid ="+ sid); ' –

+0

SchoolsDetails 클래스의 delete 함수 내부에서 removeBookmarkItem을 사용했습니다. 위의 코드를 볼 수 있습니다. – therameshbista

+0

당신이 삭제하고자하는 ID를 gettitng하고 있습니까? 선 ? 'bookmarkitem.setBookmarkID (Integer.parseInt (cursor.getString (0))); –

답변

1

사용이 : D

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

삭제 방법은 db를 통해 확인할 수 있습니다. SQLite 용 DB 브라우저를 다운로드하고이 브라우저로 db 파일을 열어서 북마크 상태를 정말로 지우는 지 확인하십시오. 쿼리에 문제가 없다면 확인하십시오. 도우미 클래스

관련 문제