Ich habe ein Stück Code wie das und es funktioniert tatsächlich gut. Die einzige Sorge, die ich habe, ist, dass es Bild in base64 konvertiert, und es scheint viel Speicher zu essen.Speichern von Speicher auf Bildsynchronisation auf Android
Ich würde gerne wissen, ob es bessere Möglichkeiten gibt, es zu tun.
// SYNCING IMAGES
private boolean syncImages() {
boolean update = false;
for (Asset asset : assets) {
// Get all images for the asset (list) -> get string name of image (string)
List<Image> remoteAssetImages = RESTfulService.getInstance().getAssetImages(asset.getId());
ArrayList<String> remoteAssetURIs = new ArrayList<>();
for (Image img : remoteAssetImages)
remoteAssetURIs.add(img.getImageId() + ".jpg");
for (String remoteURI : remoteAssetURIs) {
if (!asset.getImages().contains(remoteURI)) {
long imageId = Long.parseLong(remoteURI.replace(".jpg", ""));
// Perform synchronous get request
try {
Bitmap img = Picasso.with(getApplicationContext())
.load("http://www.google.com/image" + imageId + "/jpg")
.get();
saveRemoteImage(getApplicationContext(), img, imageId, asset);
asset.setConcatenatedImageURI();
AssetDatabaseHandler.getInstance(getApplicationContext()).updateAsset(asset);
} catch (IOException e) {
e.printStackTrace();
}
update = true;
}
}
Iterator<String> uriIterator = asset.getImages().iterator();
while(uriIterator.hasNext()){
String uri = uriIterator.next();
if (!remoteAssetURIs.contains(uri)) {
String base64Image = getBase64EncodedImage(getApplicationContext(), uri);
ImageData postImage = new ImageData(6, asset.getId(), base64Image);
RESTfulService.getInstance().postImage(postImage);
renameImageFile(getApplicationContext(), asset, uri, postImage.getImageId()+".jpg");
AssetDatabaseHandler.getInstance(getApplicationContext()).updateAsset(asset);
}
}
}
return update;
}
public static void renameImageFile(Context context, Asset asset, String currentName, String newName){
File originalFile = context.getFileStreamPath(currentName);
File newFile = new File(originalFile.getParent(), newName);
if (newFile.exists())
context.deleteFile(newName);
originalFile.renameTo(newFile);
asset.getImages().remove(currentName);
asset.addImage(newName);
asset.setConcatenatedImageURI();
}
public static String getBase64EncodedImage(Context context, String imagePath){
Bitmap bmp = getImageBitmap(context, imagePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageDataBytes = stream.toByteArray();
return Base64.encodeToString(imageDataBytes, Base64.NO_WRAP);
}
Grüße,
verhindern Können Sie näher erläutern bitte? Wie kann ich Bilder in Datenblöcke hochladen? Vielen Dank. –
können Sie Google verwenden, um zu suchen, wie man das macht – tyczj