ruta - Cómo cargar una imagen en el servidor de análisis usando parse api en android
mostrar imágenes en listview de android desde servidor (5)
Úselo así
//Convert Bitmap to Byte array --For Saving Image to Parse Db. */
Bitmap profileImage= "your bitmap";
ByteArrayOutputStream blob = new ByteArrayOutputStream();
profileImage.compress(CompressFormat.PNG, 0 /* ignored for PNG */,blob);
imgArray = blob.toByteArray();
//Assign Byte array to ParseFile
parseImagefile = new ParseFile("profile_pic.png", imgArray);
parseUser.getCurrentUser().put("columname in parse db", parseImagefile);
parseUser.getCurrentUser().saveInBackground();
Espero que esto ayude..
Quiero subir una imagen en el servidor de nube parse en Android. Pero no puedo hacerlo.
He intentado con el siguiente código:
Drawable drawable = getResources().getDrawable(R.drawable.profilepic) ;
Bitmap bitmap = (Bitmap)(Bitmap)drawable()
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] data = stream.toByteArray();
ParseFile imageFile = new ParseFile("image.png", data);
imageFile.saveInBackground();
Por favor, hágame saber cómo puedo hacerlo.
He añadido una recompensa para encontrar el mejor código definitivo para este problema común
Después de luchar durante varias horas aquí, el segmento de código funciona para mí.
1. Miembro de datos de la clase de actividad
Bitmap bmp;
Intent i;
Uri BmpFileName = null;
2. Iniciando la cámara. El objetivo es iniciar la actividad de la cámara y BmpFileName para almacenar la referencia al archivo
String storageState = Environment.getExternalStorageState();
if (storageState.equals(Environment.MEDIA_MOUNTED)) {
String path = Environment.getExternalStorageDirectory().getName() + File.separatorChar + "Android/data/" + this.getPackageName() + "/files/" + "Doc1" + ".jpg";
File photoFile = new File(path);
try {
if (photoFile.exists() == false) {
photoFile.getParentFile().mkdirs();
photoFile.createNewFile();
}
}
catch (IOException e)
{
Log.e("DocumentActivity", "Could not create file.", e);
}
Log.i("DocumentActivity", path);
BmpFileName = Uri.fromFile(photoFile);
i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, BmpFileName);
startActivityForResult(i, 0);
3. Leer los contenidos de la salida de la cámara anulando en el resultado de la actividad. El objetivo es obtener una valoración de bmp variable.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
try {
bmp = MediaStore.Images.Media.getBitmap( this.getContentResolver(), BmpFileName);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Myocode to display image on UI - You can ignore
if (bmp != null)
IV.setImageBitmap(bmp);
}
}
4. En el evento Guardar
// MUST ENSURE THAT YOU INITIALIZE PARSE
Parse.initialize(mContext, "Key1", "Key2");
ParseObject pObj = null;
ParseFile pFile = null ;
pObj = new ParseObject ("Document");
pObj.put("Notes", "Some Value");
// Ensure bmp has value
if (bmp == null || BmpFileName == null) {
Log.d ("Error" , "Problem with image"
return;
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, stream);
pFile = new ParseFile("DocImage.jpg", stream.toByteArray());
try
{
pFile.save();
pObj.put("FileName", pFile);
pObj.save();
_mParse.DisplayMessage("Image Saved");
}
catch (ParseException e)
{
// TODO Auto-generated catch block
_mParse.DisplayMessage("Error in saving image");
e.printStackTrace();
}
// Terminar la actividad en mi caso. puedes elegir algo más para terminar ();
Así que aquí están las diferencias clave de los demás
- Llamé a initialize parse. Puede que se rían de eso, pero la gente ha gastado el código de depuración de una hora sin darse cuenta de que no se inicializó el análisis
- Use Guardar en lugar de GuardarInvamento. Entiendo que puede contener la actividad, pero ese es el comportamiento deseado para mí y, lo que es más importante, funciona
Avísame si no funciona
Guarde ParseObject en el fondo
// ParseObject ParseObject pObject = new ParseObject("ExampleObject"); pObject.put("myNumber", number); pObject.put("myString", name); pObject.saveInBackground(); // asynchronous, no callback
Guardar en el fondo con devolución de llamada
pObject.saveInBackground(new SaveCallback () { @Override public void done(ParseException ex) { if (ex == null) { isSaved = true; } else { // Failed isSaved = false; } } });
Las variaciones del método save ... () incluyen lo siguiente:
saveAllinBackground() saves a ParseObject with or without a callback. saveAll(List<ParseObject> objects) saves a list of ParseObjects. saveAllinBackground(List<ParseObject> objects) saves a list of ParseObjects in the background. saveEventually() lets you save a data object to the server at some point in the future; use this method if the Parse cloud is not currently accessible.
Una vez que un ParseObject se ha guardado con éxito en la nube, se le asigna un único Object-ID. Este Object-ID es muy importante ya que identifica de manera única esa instancia de ParseObject. Utilizaría el Object-ID, por ejemplo, para determinar si el objeto se guardó correctamente en la nube, para recuperar y actualizar una instancia de objeto Parse determinada, y para eliminar un ParseObject en particular.
Espero que resuelvas tu problema ...
Código simple de Imageupload y retriving usando Glide para analizar.
Carga de imagen
destination_profile
es el objeto de archivo del que desea cargar la ruta de la imagen.
ParseUser currentUser = ParseUser.getCurrentUser();
if (destination_profile != null) {
Glide.with(getActivity()).load(destination_profile.getAbsolutePath()).asBitmap().toBytes().centerCrop().into(new SimpleTarget<byte[]>() {
@Override
public void onResourceReady(byte[] resource, GlideAnimation<? super byte[]> glideAnimation) {
final ParseFile parseFile = new ParseFile(destination_profile.getName(), resource);
parseFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
currentUser.put("picture", parseFile);
currentUser.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
showToast("Profile image upload success");
}
});
}
});
}
});
}
Recuperación de imagen
img_userProfilePicture_bg
es un boject de ImageView donde desea establecer la imagen.
ParseUser currentUser = ParseUser.getCurrentUser();
if (currentUser.has("picture")) {
ParseFile imageFile = (ParseFile) currentUser.get("picture");
imageFile.getDataInBackground(new GetDataCallback() {
public void done(final byte[] data, ParseException e) {
if (e == null) {
Glide.with(getActivity()).load(data).centerCrop().into(img_userProfilePicture_bg);
} else {
// something went wrong
}
}
});
}
Parse.initialize(this, "applicationId", "clientKey");
byte[] data = "Sample".getBytes(); //data of your image file comes here
final ParseFile file = new ParseFile(data);
try {
file.save();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (file.isDirty()){
//exception or error message etc
}
else{
try {
ParseUser.logIn("username", "password"); //skip this if already logged in
} catch (ParseException e2) {
e2.printStackTrace();
}
ParseObject userDisplayImage = new ParseObject("UserDisplayImage");
user = ParseUser.getCurrentUser();
userDisplayImage.put("user", user); //The logged in User
userDisplayImage.put("displayImage", file); //The image saved previously
try {
userDisplayImage.save(); //image and user object saved in a new table. Check data browser
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//See how to retrieve
ParseQuery query = new ParseQuery("UserDisplayImage");
query.whereEqualTo("user", user);
try {
parseObject = query.getFirst();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ParseFile imageFile = null;
imageFile = parseObject.getParseFile("displayImage");
try {
byte[] imgData = imageFile.getData(); //your image data!!
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}