2017-01-15 6 views
1

私はチタンでアプリケーションを構築しています。電話、ユーザーのプロフィール画像に保存したいと思います。私のログイン機能では、APIの応答の後、私が実行しようとしました:チタン - ファイルシステムにリモートイメージを保存

Ti.App.Properties.setString("user_picture_name", res.profil_picture); 
var image_to_save = Ti.UI.createImageView({image:img_url}).toImage(); 
var picture = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, res.profil_picture); //As name, the same as the one in DB 
picture.write(image_to_save); 

そして、私は画像を表示するビューで:

var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory,Ti.App.Properties.getString("user_picture_name")); 

var image = Ti.UI.createImageView({ 
    image:f.read(), 
    width:200, 
    height:100, 
    top:20 
}); 
main_container.add(image); 

しかし、画像が表示されていません。誰か助けてくれますか?

どうもありがとう:)上の手動遠隔画像をキャッシュする必要はありません

答えて

1

はあなたのコードと2つの問題があります。

1 - あなたのイメージビューはUIスタックまたは単にディスプレイ上でレンダリングされていない限り、あなたはtoImage()メソッドを使用することはできません。むしろtoBlob()メソッドを使用する必要があります。

2点番号。 1は、URLからの画像が完全に読み込まれるまで、または画像ビューに表示されるまで、toBlob()メソッドを直接使用できないため、使用している方法では機能しません。画像の読み込みを確認するには、Ti.UI.ImageView onload event

を使用します。ただし、このようなタイプのタスクを実行するにはもう少し良い方法があります。

あなたはログインAPIレスポンスからの画像のURLを持っているので、あなたはこのようなHTTPクライアント呼び出しから画像を取得するために、このURLを使用することができます。

function fetchImage() { 
    var xhr = Ti.Network.createHTTPClient({ 
     onerror : function() { 
      alert('Error fetching profile image'); 
     }, 

     onload : function() { 
      // this.responseData holds the binary data fetched from url 
      var image_to_save = this.responseData; 

      //As name, the same as the one in DB 
      var picture = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, res.profil_picture); 
      picture.write(image_to_save); 

      Ti.App.Properties.setString("user_picture_name", res.profil_picture); 

      image_to_save = null; 
     } 
    }); 

    xhr.open("GET", img_url); 
    xhr.send(); 
} 
+0

うまく動作します!ありがとうPrashant Saini :) –

+0

あなたは正しい答えをマークして、Prashantを信用し、他のユーザーが将来的に実際のソリューションを見つけるのを助けるべきです。 :) –

-1

リモート画像が リリース3.1.0以降、iOSのプラットフォーム上で自動的にキャッシュされているので、 Androidプラットフォーム

[see docs here & credit to Fokke Zandbergen]

ただ、最初のアクセス時にチ​​タンがあなたのためにそれをダウンロードしてキャッシュします、あなたのUIにリモート画像のURLを使用します。同じ画像URLへの次回のアクセスは、実際にローカルデバイス上の自動的にキャッシュされたバージョンになります(コードは最良のコードではありません)。

Hth。

+0

このソリューションは、修正のURLに対してのみ機能します。イメージURLが変更された場合、それは機能しません。 –

+0

まあ、私はそれが言及する価値があったと思った。ありがとうございました –

+0

はい、いいことでしたが、この質問の文脈ではありませんでした。ユーザーが尋ねなかったことを言及する代わりに、実際の回答を直接質問に照会しようとする必要があります。彼はストレージに画像を保存したいと言いました。これは、クロッピング、サイズ変更などの更新のようにこの画像を使用することを意味します。 :) –

関連する問題