TiBlob getBytes在Android上返回0的长度

时间:2014-07-30 19:49:51

标签: android titanium

应用类型:移动 Titanium SDK:3.3.0 平台:Android 设备:摩托罗拉Moto X(4.4.2) 主机操作系统:Mac OS X Mavericks

我试图在Android Titanium模块中使用TiBlob对象的getBytes()方法时遇到问题。我的函数就是这样的TiBlob

public void setImage(TiBlob blob) {
    ...
    byte[] byteArray = blob.getBytes();
    ...
}

当我在javascript中调用该函数时,我这样做:

Ti.API.info("Calling toImage function");
var image_blob = image.toImage();
Ti.API.info("Setting image from blob");
image_module.image = image_blob;

调用setImage函数时,出现此错误:

[DEBUG] ImageblurModule: (KrollRuntimeThread) [4502,4502] Converting blob to byte array
[DEBUG] ImageblurModule: (KrollRuntimeThread) [2,4504] {height=510, cropRect={x=0, width=720, height=510}, media=[object TiBlob], y=0, mimeType=image/png, x=0, width=720}
[WARN]  W/System.err: java.lang.ArrayIndexOutOfBoundsException: length=0; index=786812398
[WARN]  W/System.err:   at java.util.LinkedHashMap.get(LinkedHashMap.java:253)
[WARN]  W/System.err:   at com.globesherpa.imageblur.ImageblurModule.setImage(ImageblurModule.java:78)
[WARN]  W/System.err:   at org.appcelerator.kroll.runtime.v8.V8Object.nativeFireEvent(Native Method)
[WARN]  W/System.err:   at org.appcelerator.kroll.runtime.v8.V8Object.fireEvent(V8Object.java:64)
[WARN]  W/System.err:   at org.appcelerator.kroll.KrollProxy.doFireEvent(KrollProxy.java:884)
[WARN]  W/System.err:   at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1107)
[WARN]  W/System.err:   at org.appcelerator.titanium.proxy.TiViewProxy.handleMessage(TiViewProxy.java:347)
[WARN]  W/System.err:   at android.os.Handler.dispatchMessage(Handler.java:98)
[WARN]  W/System.err:   at android.os.Looper.loop(Looper.java:136)
[WARN]  W/System.err:   at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:112)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我想出来了。尽管没有关于此的文档,但在Android中,当您从JavaScript传递blob时,必须使用blob.media。例如,如果你正在使用.toImage()函数,它必须是这样的:

var imageBlob = win.toImage().media;

imageModule.image = imageBlob;

希望这有助于其他人通过Titanium旅行。