How to pin a ParseObject with a ParseFile to the Parse Local Datastore in OFFLINE?

后端 未结 3 1193
忘掉有多难
忘掉有多难 2020-12-10 07:35

I am using the following code to store the ParseObject with a ParseFile. I have enabled Parse local datastore in Application subclass. This code storing an instance of the P

3条回答
  •  有刺的猬
    2020-12-10 08:24

    I really liked ashokgujju's solution. In my case, I wanted to save a picture from an Android device in offline mode, so this is what happened to me:

    1.- Only by doing that (ashokgujju's solution) will not add a file into your parse table, as SAndroidD pointed out, if you want that, you might use an aftersave Parse Cloud function, something like this:

    Parse.Cloud.afterSave("Recordings_or_WhatEverYourTableIs", function(request){
        bytes = request.object.get("data"); //"data" is the name given by  ashokgujju at "obj.put("data", data);"
    
        if(bytes){
             var file = new Parse.File("myFile.png", bytes); //png or whatever you want
             file.save().then(function(success){
                      request.object.set("record_or_MyColumnWithParseFile", file);
                      request.object.unset("data"); //optional, if you are not going to use this data, it has no meaning keep it there anymore and you will save some space
                      request.object.save();
             },function(error){
                      //error
             }); 
        }
    
    }
    

    That worked like a charm! but...

    2.- But only for the Thumbnail, I mean, a very small picture, once I wanted to do the same with a big picture, I faced this:

    com.parse.ParseRequest$ParseRequestException: The object is too large -- should be less than 128 kB
    

    It took me a while to realise that, because no errors where shown, just like SAndroidD was saying. I had to add a callback to saveEventually to see it.

      File file = new File(filePath);
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            byte data[] = new byte[(int) file.length()];
            fis.read(data);
    
            ParseObject obj = new ParseObject("Recordings");
            obj.put("name", name);          
            obj.put("data", data);
            obj.saveEventually(new SaveCallback() {
                        @Override
                        public void done(ParseException e) {
                            Log.i(MyClass.logName," is it everything ok boy? "+e);
                        }
                    });
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    So! to summarize: ashokgujju's cool workaround plus my afterSave function will save any parseFile in offline mode, as long as the file itself is not that big.

提交回复
热议问题