2016-06-23 4 views
0

こんにちはAS3航空任意の助けに前もって感謝...Androidのファイルパス

私はアプリの格納ディレクトリのサブフォルダ内のすべての画像が表示される必要があり、次の機能があります。

public function mygallery():void 
{ 
     var gallery:File = File.applicationStorageDirectory.resolvePath("IMAGES/"); 
     var gfiles:Array = gallery.getDirectoryListing(); 

     var gcount:int = 0; 
     gcount = gfiles.length; 

     var x_counter:Number = 0; 
     var y_counter:Number = 0; 

     createContainer(); 
     callThumbs(); 

     function createContainer():void 
     { 
      container_mc = new MovieClip(); 
      container_mc.x = gx; 
      container_mc.y = gy; 
      //container_mc.width = gthumbw; 
      //container_mc.height = gthumbh; 
      addChild(container_mc); 
     } 

     function callThumbs():void 
     { 
      for (var j:uint = 0; j < gcount; j++) 
      { 
       var thumb_url = gfiles[j].nativePath; 
       var thumb_loader = new Loader(); 
       thumb_loader.load(new URLRequest(thumb_url)); 
       thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded); 

       thumb_loader.x = (gthumbw+gspw)*x_counter; 
       thumb_loader.y = (gthumbh+gsph)*y_counter; 
       if (x_counter+1 < gcol) 
       { 
        x_counter++; 
       }else 
       { 
        x_counter = 0; 
        y_counter++; 
       } 
       //trace(gfiles[j].nativePath); 
      } 
     } 

     function thumbLoaded(e:Event):void 
     { 
      var my_thumb:Loader = Loader(e.target.loader); 

      my_thumb.width = gthumbw; 
      my_thumb.height = gthumbh; 

      container_mc.addChild(my_thumb); 
     } 
} 

gcountはフォルダ内の正しいファイル数を返しますが、何らかの理由で画像がまったく表示されません。

私はこれをWindowsで実行するとうまくいきます。それはAndroid用のサンドボックス問題か、ファイルパスを間違って使っていると思います。

Loaderを使用している場合何かアドバイスが大幅に

+0

さて、あなたはローダーだけではなく、完全なイベントでエラーを聞くことによって開始することができます。私の答え[ここ](http://stackoverflow.com/a/32077648/1457439)の最初の部分を参照してください。また、個人的なメモだけで、インライン関数はAS3では避けるのが最善です。 – BadFeelingAboutThis

+0

こんにちは、助けてくれてありがとうございました。 IOErrorEventをリッスンするとエラー#2035が発生します。どのように私はパスを指していますか? "app-storage:// IMAGES/?? – cnapsys

+0

おそらく' gFiles [j] .nativePath'の代わりに 'gFiles [j] .url'を使うと、これはうまくいくでしょう。ネイティブパスは' File'& 'FileStream'クラス(とにかくローカルファイルの方が良いかもしれません)とurlは' file: 'スキームのサンドボックス制限を持つローダーのためのものです。 – BadFeelingAboutThis

答えて

1

を高く評価され、あなたの代わりにnativePathFileオブジェクトのurlプロパティを参照する必要があります。これは、file:/スタイルの参照ではなく、ローダーフレンドリーなapp-storage:/スキームを提供します。

まず第一に、あなたがファイルをロードするたびに、しかし、あなたがエラーを聞く必要があります。

thumb_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
thumb_loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
+0

もう一度時間をとってくれてありがとう。また、nativePathをURLに変更しましたが、まだ運がありません。 – cnapsys

+0

「copymsg.text =」パス: "+ gallery.url +" \ n "+ gfiles.length +"ファイル "+" \ n "+パス:app-storage:/ IMAGES 1ファイルとファイルIMAG0001.JPGの名前ですが、何らかの理由でアプリケーションがシャットダウンしてから5〜10秒後に終了しますそれはその情報を表示し、それでもまだステージ上にサムが表示されていない – cnapsys

+0

今朝もう少し試してみたら、問題の原因がわかったと思う。フォルダに1つのファイルだけを置く。カメラやスキャナーの高解像度ファイルの場合は表示されませんが、300〜400kbの小さなものを置くとサムネイルが表示されます。フル解像度の画像? – cnapsys