2

I have GAE + endpoints working between an Android client and app engine backend.

I'm now at the point where I want to store a small image as a Blob datatype using JDO. I have the following two methods in my model's backend:

public byte[] getPicture() {
    if (picture == null) {
        return null;
    }
    return picture.getBytes();
}

public void setPicture(byte[] bytes) {
    this.picture = new Blob(bytes);
}

However, when I generate my endpoint for my Android client, the setPicture(byte[] bytes) method signature gets transformed to setPicture(String bytes).

Is that a bug or intended? If intended, how am I supposed to transfer my image to a String?

Thanks!

Dan McGrath
  • 41,220
  • 11
  • 99
  • 130
zedix
  • 1,171
  • 2
  • 9
  • 21

1 Answers1

5

Alright, I figured it out. Turns out it's expecting the byte array in base64 format, which explains why the byte[] signature gets changed to a String.

So in Android to go from byte[] to base64 string I used, where mPicture is my byte array:

Base64.encodeToString(mPicture, Base64.DEFAULT);

And to receive a String and transform back to byte[], where picture is the base64 string received from endpoint:

Base64.decode(picture, Base64.DEFAULT);

Hope this helps!

zedix
  • 1,171
  • 2
  • 9
  • 21
  • I'm running into this problem right now but it seems that there are many Base64 libraries available but none with the constructor you used. Which library are you using? Thanks! – Roberto Betancourt Jan 21 '15 at 19:12
  • I'm using android.util.Base64 – zedix Jan 21 '15 at 23:17
  • Is there anyway to view the picture in the console? I stored an image as a property but the size of this entity wasn't changed in the overview section of datastore – Timtianyang Feb 25 '15 at 18:10
  • on a side note, you should consider using blosbtore to store this kind of files. datastore isn't really optimized for binary (potentially large) files. BTW blobstore does have a preview in the developers console you can actually see the stored files. – jirungaray Mar 26 '15 at 16:30