应用类型:移动 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)
有什么想法吗?
答案 0 :(得分:0)
我想出来了。尽管没有关于此的文档,但在Android中,当您从JavaScript传递blob时,必须使用blob.media。例如,如果你正在使用.toImage()函数,它必须是这样的:
var imageBlob = win.toImage().media;
imageModule.image = imageBlob;
希望这有助于其他人通过Titanium旅行。