Showing posts with label flash builder. Show all posts
Showing posts with label flash builder. Show all posts

Wednesday, November 24, 2010

Upload Image from Camera in Mobile Adobe AIR Android

For some reason I really struggled to upload a File (bytes) that I had in memory. It's easy to upload with the FileReference class, but that has an order of what methods can be called dependent on the browse() method being called. In this case, I have an Android <s:MobileApplication> app that uses the CameraUI class to take a picture and upload.

The key is taking the File that is returned, reading the bytes, and using a 3rd party library called MultipartURLLoader (which URLLoader can't do) to upload it.


private var myCam:CameraUI;
private var pictureFromCamera:File;
private var myByteArray:ByteArray;



/** This method you're used to seeing. The handler for when a user takes a picture */
protected function creationCompleteHandler(event:FlexEvent):void
{
      if (CameraUI.isSupported)
{
myCam = new CameraUI();
myCam.addEventListener(MediaEvent.COMPLETE, onPictureTakenComplete, false, 0, true);
}
}


/**
 * Handler for when user closes camera with a picture. MediaEvent (AIR only).
 */
private function onPictureTakenComplete(evt:MediaEvent):void
{
myByteArray = new ByteArray();
pictureFromCamera = evt.data.file;
//load file into bytes
var myFileStream:FileStream = new FileStream();
myFileStream.open(pictureFromCamera, FileMode.READ);
myFileStream.readBytes(myByteArray);
 myFileStream.close();
}


/** method that uploads to server using a 3rd party lib */
public function upload_clickHandler(e:Event):void
{

var ml:MultipartURLLoader = new MultipartURLLoader();
ml.addEventListener(Event.COMPLETE, onUploadComplete, false, 0, true);
//add variables
ml.addVariable('title', titleField.text);
//add file bytes
ml.addFile(myByteArray, pictureFromCamera.name, 'file');
//submit
ml.load('http://justinbieberistheworst.com/upload.do');
}

Monday, April 12, 2010

ArgumentError: Error #1063: Argument count mismatch on mx.core::CrossDomainRSLItem(). Expected 5, got 7.
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::initialize()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:1878]
at mx.managers::SystemManager/initHandler()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\SystemManager.as:2419]

This was an easy one to fix. Your main app is compiling with a different Flex SDK than one of your modules (RSL). Check each module Flex Project Compiler properties and make sure they're all on the same sdk.