Titanium JS:无法在TiSocial模块中使用存储在SQLite数据库中的图像

时间:2014-04-01 22:06:24

标签: titanium appcelerator titanium-alloy

我的应用程序在本地SQLite数据库中有一堆存储为blob的图像。这些图像是使用设备相机拍摄的。我正在使用钛合金,因此使用.save()方法和合金模型保存图像。

我已经开始使用可以将图片发布到Twitter或Facebook的TiSocial module。其中一个参数是image,它必须是:

  

您想要分享的图片的本地/远程路径

我想要使用的图像被设置为ImageView上的图像属性。 ImageView图像的设置如下:$.theImageView.image = args.the_image;,其中args.image是图像blob,取自数据库集合。

我尝试将此图像blob设置为TiSocial module初始化方法上的图像:

Social.activityView({
    text: "Hello world! Take a look at this: " + args.name,
    image: args.the_image,
    removeIcons:"airdrop,print,copy,contact,camera"
});

或者我尝试使用ImageView上保存的图像,如下所示:

Social.activityView({
    text: "Hello world! Take a look at this: " + args.name,
    image: $.theImageView.image,
    removeIcons:"airdrop,print,copy,contact,camera"
});

然而,这些都不起作用,并且Tweet或Facebook消息对话框中没有显示图像。并且控制台中不会出现任何错误。

另一方面,如果我将image属性设置为保存在assets文件夹中的图像,那么它可以正常工作。例如:

`image: "an_image.jpg"`

我尝试了下面评论中提到的解决方案,即将图像保存到Ti.FileSystem,然后从那里读取图像。但是,这仍然无效。

3 个答案:

答案 0 :(得分:1)

您可以尝试以这种方式共享远程图像...

var largeImg = Ti.UI.createImageView({
        width : Ti.UI.SIZE,
        height : 'auto',
        image :'http://www.google.com/doodle4google/images/splashes/featured.png'
    });

var imageGoogle =largeImg.toBlob();

// share image
Social.activityView({
    status : "Hello world! Take a look at this: ",
    image : imageGoogle,
    removeIcons:"airdrop,print,copy,contact,camera"
});

答案 1 :(得分:0)

然后我建议在数据库表中添加一个名为img_path的字段,因为你无法从blob获取路径,因此当你将任何blob存储到合金模型时,还要将其路径添加到该模型,以便以后可以检索它。份额。

希望你明白。

答案 2 :(得分:0)

通过将文件保存到Ti.Filesystem,然后检索它并使用.getNativePath()方法,我有一些运气:

function getImage() {
    var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, args.alloy_id + '.jpg');  
    return f.read();  
 }

var theImage = getImage();

Social.activityView({
    text: "Just tried this beer called " + args.name,
    image: theImage.getNativePath(),
    removeIcons:"airdrop,print,copy,contact,camera"
});