【问题标题】:baasbox save document on android APIbaasbox 在 android API 上保存文档
【发布时间】:2016-08-16 22:04:46
【问题描述】:

我有以下讨厌的堆栈跟踪

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)

当我尝试将图片保存到以前在本地 baasbox 安装上创建的集合中时会发生这种情况,这是导致问题的代码,不确定实际问题是什么... 非常感谢您提供的任何帮助...

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());
        }
    }
});

【问题讨论】:

    标签: android save document baasbox


    【解决方案1】:

    这段代码解决了问题,我应该从一开始就使用文件,而不是将图像视为文档,任何关于何时使用文件以及何时使用文档的cmets都非常受欢迎。

    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());
            }
        }
    });
    

    【讨论】:

    • 我认为你所做的是正确的。一般来说,任何在 android 系统上属于“文件”的内容——例如 word、excel、mp3、电影、图片等——你应该使用 BaasFile,因为它用于存储二进制数据。在处理您打算存储在数据库中的实际应用程序数据时,应使用 Document。在这种情况下,您对整个对象以及对象的各个属性感兴趣。在上述情况下,您可以使用 Document 来存储图像的元数据(exif 数据)以及图像的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多