diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/MapOfStringsToStringConverter.java b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/MapOfStringsToStringConverter.java index 3416feb852e8..8790c7a255c4 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/MapOfStringsToStringConverter.java +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/MapOfStringsToStringConverter.java @@ -3,6 +3,8 @@ import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import org.greenrobot.greendao.converter.PropertyConverter; import java.io.ByteArrayInputStream; @@ -13,42 +15,42 @@ import java.util.HashMap; import java.util.Map; +import static android.util.Base64.DEFAULT; + class MapOfStringsToStringConverter implements PropertyConverter, String> { private static final String LOG_TAG; @Override + @NonNull public Map convertToEntityProperty(String databaseValue) { if (databaseValue == null) { - return null; + return new HashMap<>(); } try { - ByteArrayInputStream bis=new ByteArrayInputStream(Base64.decode(databaseValue,Base64.DEFAULT)); - ObjectInputStream objectInputStream=new ObjectInputStream(bis); + ByteArrayInputStream bis = new ByteArrayInputStream(Base64.decode(databaseValue, DEFAULT)); + ObjectInputStream objectInputStream = new ObjectInputStream(bis); objectInputStream.readObject(); - - } catch (IOException e) { - Log.e(LOG_TAG, "Cannot serialize map to database.", e); - } catch (ClassNotFoundException e) { + } catch (IOException | ClassNotFoundException e) { Log.e(LOG_TAG, "Cannot serialize map to database.", e); } - return null; + return new HashMap<>(); } @Override - public String convertToDatabaseValue(Map entityProperty) { - if (entityProperty == null) { - return null; - } + @NonNull + public String convertToDatabaseValue(Map entity) { + HashMap map = entity != null ? new HashMap<>(entity) : new HashMap<>(); + try { - ByteArrayOutputStream bos=new ByteArrayOutputStream(); - ObjectOutputStream objectOutputStream=new ObjectOutputStream(bos); - objectOutputStream.writeObject(new HashMap<>(entityProperty)); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(bos); + objectOutputStream.writeObject(map); objectOutputStream.flush(); - return Base64.encodeToString(bos.toByteArray(),Base64.DEFAULT); + return Base64.encodeToString(bos.toByteArray(), DEFAULT); } catch (IOException e) { Log.e(LOG_TAG, "Cannot serialize map to database.", e); } - return null; + return ""; } static { diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/OfflineSavedProduct.java b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/OfflineSavedProduct.java index cefbf5393679..3ab6a4f0dd76 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/OfflineSavedProduct.java +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/models/entities/OfflineSavedProduct.java @@ -23,6 +23,7 @@ @Entity public class OfflineSavedProduct implements Serializable { private static final long serialVersionUID = 1L; + @SuppressWarnings("NotNullFieldNotInitialized") @Index(unique = true) @NonNull private String barcode; @@ -30,6 +31,7 @@ public class OfflineSavedProduct implements Serializable { private Long id; @Index private boolean isDataUploaded; + @SuppressWarnings("NotNullFieldNotInitialized") @NonNull @Convert(converter = MapOfStringsToStringConverter.class, columnType = String.class) private Map productDetails; @@ -70,16 +72,20 @@ public String getLanguage() { @Nullable public String getName() { - final Map map = productDetails; - final String language = firstNotEmpty(map.get(ApiFields.Keys.LANG), "en"); - return firstNotEmpty(map.get(ApiFields.Keys.lcProductNameKey(language)), map.get(ApiFields.Keys.lcProductNameKey("en"))); + final String language = firstNotEmpty(productDetails.get(ApiFields.Keys.LANG), "en"); + return firstNotEmpty( + productDetails.get(ApiFields.Keys.lcProductNameKey(language)), + productDetails.get(ApiFields.Keys.lcProductNameKey("en")) + ); } @Nullable public String getIngredients() { - final Map map = productDetails; - final String language = firstNotEmpty(map.get(ApiFields.Keys.LANG), "en"); - return firstNotEmpty(map.get(ApiFields.Keys.lcIngredientsKey(language)), map.get(ApiFields.Keys.lcIngredientsKey("en"))); + final String language = firstNotEmpty(productDetails.get(ApiFields.Keys.LANG), "en"); + return firstNotEmpty( + productDetails.get(ApiFields.Keys.lcIngredientsKey(language)), + productDetails.get(ApiFields.Keys.lcIngredientsKey("en")) + ); } @Nullable