Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 循环视图适配器未更新Sqlite获取的值_Android_Database_Android Recyclerview_Android Sqlite - Fatal编程技术网

Android 循环视图适配器未更新Sqlite获取的值

Android 循环视图适配器未更新Sqlite获取的值,android,database,android-recyclerview,android-sqlite,Android,Database,Android Recyclerview,Android Sqlite,我有一个应用程序,最初我手动插入字体颜色和字体大小的参数,通过读取数据库将这些数据输入adpater,我能够更改列表项的fontsize和fontcolor 重要代码: 插入助手的方法: public boolean insertData(ContactModel contactModel) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new Co

我有一个应用程序,最初我手动插入字体颜色和字体大小的参数,通过读取数据库将这些数据输入adpater,我能够更改列表项的fontsize和fontcolor

重要代码: 插入助手的方法:

 public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
//        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
        contentValues.put(col_5,contactModel.getDataIndex());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
 public void tempinsert(String name,String num,String color,int size,int index){
        boolean inSamedata=tempSqliteDatabaseHelper.IsItemExist(name,num);
        if(inSamedata==false){
            boolean indata = tempSqliteDatabaseHelper.insertData(new ContactModel(name,num,color,size,index));
            if (indata == true) {
                Log.e("DataSave","DataSave");
            }
            else{
                Log.e("In_Data_not_True","In Data not True");
            }
        }else if(inSamedata==true){
            Log.e("Record_Exist","Record Exist");
        }
    }
tempinsert(getDisplayName(),getPhNumber(),"#2d2d2d",35,1);
   @Override
    public void onBindViewHolder(@NonNull MyContactHolder myContactHolder, int i) {

        myContactHolder.Name.setText(customDataListModels.get(i).getName());
        myContactHolder.Number.setText(customDataListModels.get(i).getNumber());
        Log.e("poistionAdapter:", String.valueOf(myContactHolder.getPosition()));

        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Toast.makeText(mcontext.getApplicationContext(), "No Contact Selected", Toast.LENGTH_SHORT).show();

            return;
        }
        while (cursor.moveToNext()) {
           Integer SFontsize=cursor.getInt(4);
            String SColor=cursor.getString(3);
        myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
            myContactHolder.Name.setTextSize(SFontsize);

            Log.d("Font_Size", String.valueOf(SFontsize));
            Log.d("Font_color", String.valueOf(SColor));
        }
    }
插入数据的方法:

 public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
//        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
        contentValues.put(col_5,contactModel.getDataIndex());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
 public void tempinsert(String name,String num,String color,int size,int index){
        boolean inSamedata=tempSqliteDatabaseHelper.IsItemExist(name,num);
        if(inSamedata==false){
            boolean indata = tempSqliteDatabaseHelper.insertData(new ContactModel(name,num,color,size,index));
            if (indata == true) {
                Log.e("DataSave","DataSave");
            }
            else{
                Log.e("In_Data_not_True","In Data not True");
            }
        }else if(inSamedata==true){
            Log.e("Record_Exist","Record Exist");
        }
    }
tempinsert(getDisplayName(),getPhNumber(),"#2d2d2d",35,1);
   @Override
    public void onBindViewHolder(@NonNull MyContactHolder myContactHolder, int i) {

        myContactHolder.Name.setText(customDataListModels.get(i).getName());
        myContactHolder.Number.setText(customDataListModels.get(i).getNumber());
        Log.e("poistionAdapter:", String.valueOf(myContactHolder.getPosition()));

        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Toast.makeText(mcontext.getApplicationContext(), "No Contact Selected", Toast.LENGTH_SHORT).show();

            return;
        }
        while (cursor.moveToNext()) {
           Integer SFontsize=cursor.getInt(4);
            String SColor=cursor.getString(3);
        myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
            myContactHolder.Name.setTextSize(SFontsize);

            Log.d("Font_Size", String.valueOf(SFontsize));
            Log.d("Font_color", String.valueOf(SColor));
        }
    }
调用上述方法:

 public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
//        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
        contentValues.put(col_5,contactModel.getDataIndex());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
 public void tempinsert(String name,String num,String color,int size,int index){
        boolean inSamedata=tempSqliteDatabaseHelper.IsItemExist(name,num);
        if(inSamedata==false){
            boolean indata = tempSqliteDatabaseHelper.insertData(new ContactModel(name,num,color,size,index));
            if (indata == true) {
                Log.e("DataSave","DataSave");
            }
            else{
                Log.e("In_Data_not_True","In Data not True");
            }
        }else if(inSamedata==true){
            Log.e("Record_Exist","Record Exist");
        }
    }
tempinsert(getDisplayName(),getPhNumber(),"#2d2d2d",35,1);
   @Override
    public void onBindViewHolder(@NonNull MyContactHolder myContactHolder, int i) {

        myContactHolder.Name.setText(customDataListModels.get(i).getName());
        myContactHolder.Number.setText(customDataListModels.get(i).getNumber());
        Log.e("poistionAdapter:", String.valueOf(myContactHolder.getPosition()));

        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Toast.makeText(mcontext.getApplicationContext(), "No Contact Selected", Toast.LENGTH_SHORT).show();

            return;
        }
        while (cursor.moveToNext()) {
           Integer SFontsize=cursor.getInt(4);
            String SColor=cursor.getString(3);
        myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
            myContactHolder.Name.setTextSize(SFontsize);

            Log.d("Font_Size", String.valueOf(SFontsize));
            Log.d("Font_color", String.valueOf(SColor));
        }
    }
如您所见,我正在静态插入字体颜色和大小。

用于在列表项中进行更改的onBind方法适配器中的代码:

 public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
//        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
        contentValues.put(col_5,contactModel.getDataIndex());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
 public void tempinsert(String name,String num,String color,int size,int index){
        boolean inSamedata=tempSqliteDatabaseHelper.IsItemExist(name,num);
        if(inSamedata==false){
            boolean indata = tempSqliteDatabaseHelper.insertData(new ContactModel(name,num,color,size,index));
            if (indata == true) {
                Log.e("DataSave","DataSave");
            }
            else{
                Log.e("In_Data_not_True","In Data not True");
            }
        }else if(inSamedata==true){
            Log.e("Record_Exist","Record Exist");
        }
    }
tempinsert(getDisplayName(),getPhNumber(),"#2d2d2d",35,1);
   @Override
    public void onBindViewHolder(@NonNull MyContactHolder myContactHolder, int i) {

        myContactHolder.Name.setText(customDataListModels.get(i).getName());
        myContactHolder.Number.setText(customDataListModels.get(i).getNumber());
        Log.e("poistionAdapter:", String.valueOf(myContactHolder.getPosition()));

        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Toast.makeText(mcontext.getApplicationContext(), "No Contact Selected", Toast.LENGTH_SHORT).show();

            return;
        }
        while (cursor.moveToNext()) {
           Integer SFontsize=cursor.getInt(4);
            String SColor=cursor.getString(3);
        myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
            myContactHolder.Name.setTextSize(SFontsize);

            Log.d("Font_Size", String.valueOf(SFontsize));
            Log.d("Font_color", String.valueOf(SColor));
        }
    }
在日志中,我得到的值与插入的值相同,一切正常。在这一点上,在我更新数据库中的fontsize和fontcolor后出现问题。更新后,我可以在日志中得到更新的fontsize/color,但无论何时我给它们值

myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
                myContactHolder.Name.setTextSize(SFontsize);

Textview没有根据更新更新其字体大小和颜色,有趣的是cursor.getString(3)和SFontsize,,我得到了更新值。如果您需要任何其他代码来理解我在评论中的问题帖子。

您正在调用adapter.notifyDataSetChanged();在更新阵列之后?是的,我是,确保在您调用adapter.notifyDataSetChanged()时,我也在重新安装之后进行检查;在更新阵列后?是的,我是,确保我也在RELACH应用程序后检查