2016-08-16 2 views
0

J'ai la mauvaise pile tracebaasbox enregistrer le document sur l'API Android

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
Caused by: class com.baasbox.android.BaasClientException :{"result":"error","message":"The body payload cannot be empty. Hint: put in the request header Content-Type: application/json","resource":"/document/Images","method":"POST","request_header":{"X-BAASBOX-APPCODE":["1234567890"],"Connection":["Keep-Alive"],"Content-Length":["316039"],"X-BB-SESSION":["187be9f8-dc77-436d-89de-65dd3cf0e2ba"],"Content-Type":["application/json;charset=UTF-8"],"Accept-Encoding":["gzip"],"User-Agent":["BaasBox AndroidSDK/0.9.2"],"Host":["192.168.192.59:9000"]},"API_version":"0.9.5"} 
at com.baasbox.android.NetworkTask.onClientError(NetworkTask.java:98) 
at com.baasbox.android.NetworkTask.parseResponse(NetworkTask.java:63) 
at com.baasbox.android.NetworkTask.asyncCall(NetworkTask.java:151) 
at com.baasbox.android.impl.Task.execute(Task.java:189) 
at com.baasbox.android.impl.Dispatcher$Worker.run(Dispatcher.java:170) 

suivant Cela se produit lorsque je tente d'enregistrer une image dans une collection créée précédemment sur mon installation baasbox locale, est le code ici qui provoque le problème, pas sûr quelle est la véritable question ... toute aide que vous pouvez apporter sera très appréciée ...

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage); 
ImageView imageView = (ImageView)findViewById(R.id.shareImageView); 
imageView.setImageBitmap(bitmap); 

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

BaasDocument doc = new BaasDocument("Images"); 
doc.put("title","Image"); 
doc.put("body", byteArray); 
doc.save(new BaasHandler<BaasDocument>() { 
    @Override 
    public void handle(BaasResult<BaasDocument> res) { 
     if(res.isSuccess()) { 
      Log.d("LOG","Saved: "+res.value()); 
     } else { 
      Log.d("LOG","No Saved: "+res.value()); 
     } 
    } 
}); 

Répondre

0

Ce morceau de code a résolu le problème, au lieu de traiter l'image comme un document, J'aurais dû utiliser un fichier du très être ginning, tous les commentaires sur quand utiliser les fichiers et quand utiliser les documents sont les bienvenus.

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

JsonObject attachedData = new JsonObject(); 
attachedData.put("username", BaasUser.current().getName()); 

BaasFile file = new BaasFile(attachedData); 

//BaasACL acl = new BaasACL().grantUsers(Grant.READ,"all"); 

//file.upload(acl, byteArray,new BaasHandler<BaasFile>() { 
file.upload(byteArray,new BaasHandler<BaasFile>() { 
    @Override 
    public void handle(BaasResult<BaasFile> res) { 
     if(res.isSuccess()) { 
      Log.d("LOG","File uploaded with permissions"); 
     } else { 
      Log.e("LOG","Deal with error",res.error()); 
     } 
    } 
}); 
+0

Je pense que ce que vous avez fait est correct. En général tout contenu qui est un «fichier» sur le système Android - comme Word, Excel, MP3, films, images, etc - vous devez utiliser BaasFile comme il est destiné à stocker des données binaires. Le document doit être utilisé lorsque vous traitez des données d'application réelles que vous avez l'intention de stocker dans la base de données. Dans de tels cas, vous vous intéressez à l'objet entier ainsi qu'aux attributs individuels de l'objet. Dans le cas ci-dessus, vous pouvez utiliser un document pour stocker des métadonnées (données exif) de l'image et éventuellement un lien vers l'image. – vvs