代码之家  ›  专栏  ›  技术社区  ›  sagar shetty

通过回收视图的SQLite增量

  •  -2
  • sagar shetty  · 技术社区  · 8 年前

    我有一个sqlite,列名为credits,不存在。我想通过在“回收”视图中单击按钮来增加“不存在”的值,该视图显示所有sqlite数据。你能帮忙吗?
    提前谢谢。

    我的SqliteHelper-

    public class Myhelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="mydatabase.db";
        public static final String TABLE_NAME="mytable";
        public static final String COLUMN_ID="_id";
        public static final String COL_1="NAME";
        public static  final String COL_2="CREDIT";
        public  static final String COL_3="BUNKS";
        public static final String[] COLUMNS ={COLUMN_ID,COL_1,COL_2,COL_3};
        Context con;
    
        public Myhelper(Context context) {
            super(context, DATABASE_NAME, null, 1);
            con = context;
        }
    
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            String createTable= "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT, " + " NAME TEXT, CREDIT TEXT, BUNKS INTEGER )";
            db.execSQL(createTable);
            Toast.makeText(con,"table created",Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME);
            onCreate(db);
    
        }
        public boolean insertData(String x,String y,int z){
            SQLiteDatabase db=this.getWritableDatabase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(COL_1, String.valueOf(x));
            contentValues.put(COL_2,String.valueOf(y));
           contentValues.put(COL_3,z);
            long result = db.insert(TABLE_NAME, null, contentValues);
            if (result == -1) {
                return false;
            } else {
                return true;
            }
        }
    
        public ArrayList<String> queryXdata(){
            ArrayList<String> xnewdata= new ArrayList<String>();
            String query = "SELECT "+ COL_1 + " FROM " + TABLE_NAME;
            SQLiteDatabase db=this.getWritableDatabase();
            Cursor cursor= db.rawQuery(query,null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
                xnewdata.add(cursor.getString(cursor.getColumnIndex(COL_1)));
            }
            cursor.close();
            return xnewdata;
    
        }
        public ArrayList<Integer> queryYdata(){
            ArrayList<Integer> ynewdata= new ArrayList<Integer>();
            String query = "SELECT "+ COL_3+ " FROM " + TABLE_NAME;
            SQLiteDatabase db=this.getWritableDatabase();
            Cursor cursor= db.rawQuery(query,null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
                ynewdata.add(cursor.getInt(cursor.getColumnIndex(COL_3)));
            }
            cursor.close();
            return ynewdata;
    
        }
        public  ArrayList<Integer> queryZdata(){
           ArrayList<Integer> znewdata= new ArrayList<Integer>();
            String query = "SELECT "+ COL_2+ " FROM " + TABLE_NAME;
            SQLiteDatabase db=this.getWritableDatabase();
            Cursor cursor= db.rawQuery(query,null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
                znewdata.add(((cursor.getColumnIndex(COL_2))));
            }
            cursor.close();
            return znewdata;
        }
    
        public attendence getdetails(long id){
            SQLiteDatabase db = this.getWritableDatabase();
            String query= "SELECT" + COL_2+" FROM " + TABLE_NAME +" WHERE _id=" + id;
            Cursor cursor= db.rawQuery(query,null);
            attendence attendence1= new attendence();
            if (cursor.getCount()>0){
                cursor.moveToFirst();
                attendence1.setSubname(cursor.getString(cursor.getColumnIndex(COL_1)));
                attendence1.setCredit(cursor.getString(cursor.getColumnIndex(COL_2)));
                attendence1.setBunks(cursor.getInt(cursor.getColumnIndex(COL_3)));
            }
            return attendence1;
        }
    
        public void delete(long id,Context context){
            SQLiteDatabase db=this.getWritableDatabase();
            db.execSQL("DELETE FROM "+TABLE_NAME+" WHERE _id='"+id+"'");
            Toast.makeText(context,"delted",Toast.LENGTH_SHORT).show();
        }
        public List<attendence> list(String  filter){
            String query;
            if (filter.equals("")){
                query = "SELECT * FROM " + TABLE_NAME ;
    
            }
            else {
                query= " SELECT * FROM " + TABLE_NAME ;
    
            }
            List<attendence> linkedlist = new LinkedList<>();
            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(query,null);
            attendence attendence;
            if (cursor.moveToFirst()){
                do {
                    attendence = new attendence();
                    attendence.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_ID)));
                    attendence.setSubname(cursor.getString(cursor.getColumnIndex(COL_1)));
                    attendence.setCredit(cursor.getString(cursor.getColumnIndex(COL_2)));
                    attendence.setBunks(cursor.getInt(cursor.getColumnIndex(COL_3)));
                    linkedlist.add(attendence);
                }
                while (cursor.moveToNext());
            }
            return linkedlist;
        }
    
    
        public int getbunk(int id){
    
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.query(TABLE_NAME, COLUMNS,"_id=?",new String[]{String.valueOf(id)},null,null,null,null );
            if (cursor!=null){cursor.moveToFirst();}
           int output = cursor.getInt(cursor.getColumnIndex(COL_3));
            cursor.close();
            return output;
    
        }
        public void updatebunk(int id){
            SQLiteDatabase db = this.getWritableDatabase();
            int bunk = getbunk(id);
            int bunkinc= ++bunk;
            ContentValues contentValues= new ContentValues();
            contentValues.put(COL_3,bunkinc);
            db.update(TABLE_NAME,contentValues,COLUMN_ID+" =?",new String[]{String.valueOf(id)});
            db.close();
        }
    
    }
    

    MyRecycleView适配器

    public class attendence_recycleadapter extends RecyclerView.Adapter<attendence_recycleadapter.ViewHolder> {
    
        private List<attendence> mattendence_list;
        private Context mcontext;
        public RecyclerView mrecycleview;
        @NonNull
        @Override
        public attendence_recycleadapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            LayoutInflater inflater= LayoutInflater.from(parent.getContext());
            View v=inflater.inflate(R.layout.attendence_recycleview_card,parent,false);
            ViewHolder viewHolder = new ViewHolder(v);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(@NonNull attendence_recycleadapter.ViewHolder holder, final int position) {
            final attendence attendence= mattendence_list.get(position);
    
            holder.subname.setText("Name: " + attendence.getSubname());
            holder.subcredit.setText("CREDIT: " + attendence.getCredit());
            holder.bunks.setText("BUNKS: " + attendence.getBunks());
            holder.deletesub.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Myhelper myhelper = new Myhelper(mcontext);
                   myhelper.delete(attendence.getId(),mcontext);
                  // mattendence_list.remove(position);
                  // mrecycleview.removeViewAt(position);
                   notifyItemRemoved(position);
                   notifyItemRangeChanged(position,mattendence_list.size());
                   notifyDataSetChanged();
                    delete(position);
                }
            });
            holder.addbunk.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Myhelper myhelper = new Myhelper(mcontext);
                  myhelper.updatebunk(position);
                  notifyDataSetChanged();
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return mattendence_list.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public TextView subname;
            public TextView subcredit;
            public TextView bunks;
            public View layout;
            public Button addbunk;
    
            public Button deletesub;
            public ViewHolder(View itemView) {
                super(itemView);
                layout=itemView;
                subname=(TextView)itemView.findViewById(R.id.attendernce_subname);
                subcredit=(TextView)itemView.findViewById(R.id.attendernce_credit);
                bunks=(TextView)itemView.findViewById(R.id.attendernce_bunks);
    
                addbunk = (Button)itemView.findViewById(R.id.attendence_addbunk);
                deletesub = (Button)itemView.findViewById(R.id.attendence_deletesub);
    
            }
        }
        public void add(int position,attendence attendence2){
            mattendence_list.add(position,attendence2);
            notifyItemInserted(position);
        }
        public  void delete(int position){
            mattendence_list.remove(position);
            notifyItemRemoved(position);
        }
        public attendence_recycleadapter(List<attendence> mydataset, Context context, RecyclerView recyclerView){
            mattendence_list =  mydataset;
            mcontext = context;
            mrecycleview= recyclerView;
        }
    
    }
    

    当我单击addbunk按钮时,getBunk()中出现错误。getbunk()中有一个问题,因为游标找不到任何值。

    错误消息:android.database.cursorIndexOutfoundsException:请求索引0,大小为0

    1 回复  |  直到 8 年前
        1
  •  0
  •   user8959091user8959091    8 年前

    你的代码中有几个错误。
    我重写了这两种方法。
    现在 getbunk 回报 -1 如果 id 找不到。
    我希望我没有打字错误。
    请尝试下面的代码,如果需要解释,请询问:

    public int getbunk(int id){
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT " + COL_3 + " FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + String.valueOf(id), null);
        int output = -1;
    
        if (cursor != null){
            if (cursor.moveToFirst()) {
                output = cursor.getInt(0);
            }
    
            cursor.close();
        }
    
        db.close();
    
        return output;
    }
    
    public void updatebunk(int id){
        SQLiteDatabase db = this.getWritableDatabase();
    
        int bunk = getbunk(id);
    
        if (bunk < 0) {
            Log.i("Error:", "Id=" + id + " not found!");
            return;
        }
    
        int bunkinc = ++bunk;
    
        ContentValues contentValues= new ContentValues();
        contentValues.put(COL_3, bunkinc);
        db.update(TABLE_NAME, contentValues,COLUMN_ID + "=?", new String[]{String.valueOf(id)});
        db.close();
    }