2017-08-15 1 views
2

Je passe countryList de pays pour l'enregistrer dans la base de données en utilisant Room. sa sauvegarde mais sa duplication des valeurs et OnConflict Replace stratégie ne fonctionne pas.liste de passage sur la commande Insérer à l'aide Room dupliquer les valeurs dans Android

AppDatabase.getAppDatabase(getApplicationContext()).countryDao().insertAllList(countryList); 

Les valeurs de liste sont en cours de duplication même si je passe la stratégie de remplacement ci-dessous.

@Insert(onConflict = OnConflictStrategy.REPLACE) 

Voici CountryDao

@Dao 
public interface CountryDao { 

@Query("SELECT * FROM country") 
List<Country> getAllCountries(); 

@Insert(onConflict = OnConflictStrategy.REPLACE) 
void insertAllList(List<Country> countries); 

}

Pays Objet:

@Entity(tableName = "country") 
    public class Country { 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @PrimaryKey(autoGenerate = true) 
    private int id; 
    private long countryId; 
    private String countryName; 

    public long getCountryId() { 
     return countryId; 
    } 

    public void setCountryId(long countryId) { 
     this.countryId = countryId; 
    } 

    public String getCountryName() { 
     return countryName; 
    } 

    public void setCountryName(String countryName) { 
     this.countryName = countryName; 
    } 
} 

Répondre

3

Vous devez avoir différents id pour chaque pays et assigner manuellement, sinon chaque élément aura id = 0 et remplace un autre.

Essayez sans autogenerate clé

@PrimaryKey(autoGenerate = false) 
private int id; 
+0

Non - sa ne fonctionne pas, en fait il y a une liste de deux et mais son stockage une valeur – nauman

+0

Vous devez avoir différents id pour chaque pays, sinon chaque élément aura id = 0 et remplace un autre. – kkk