AndroidのImageViewにリモートURL指定で表示できない?

android_image_missingTitaniumの開発でWordPressにアップロードした画像をListView内のImageViewに指定しても表示されず迷走したときの覚書。iOSは表示される。

アプリ環境: Titanium SDK 5.1.2.GA
サーバー環境: CentOS 6.7, nginx 1.8.1, node v4.4.1, PHP 7.0.4, ImageMagick 6.7.2-7

Androidアプリのエラー

[ERROR] TiDrawableReference: (pool-3-thread-1) [1252,2362] Problem opening stream with url http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg: Resources/http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg
[ERROR] TiDrawableReference: java.io.FileNotFoundException: Resources/http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg
[ERROR] TiDrawableReference:    at android.content.res.AssetManager.openAsset(Native Method)
[ERROR] TiDrawableReference:    at android.content.res.AssetManager.open(AssetManager.java:322)
[ERROR] TiDrawableReference:    at android.content.res.AssetManager.open(AssetManager.java:296)
[ERROR] TiDrawableReference:    at org.appcelerator.titanium.util.TiFileHelper.openInputStream(TiFileHelper.java:222)
[ERROR] TiDrawableReference:    at org.appcelerator.titanium.view.TiDrawableReference.getInputStream(TiDrawableReference.java:849)
[ERROR] TiDrawableReference:    at org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:316)
[ERROR] TiDrawableReference:    at org.appcelerator.titanium.view.TiDrawableReference.getBitmap(TiDrawableReference.java:300)
[ERROR] TiDrawableReference:    at org.appcelerator.titanium.util.TiLoadImageManager$LoadImageJob.run(TiLoadImageManager.java:128)
[ERROR] TiDrawableReference:    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
[ERROR] TiDrawableReference:    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
[ERROR] TiDrawableReference:    at java.lang.Thread.run(Thread.java:818)
[ERROR] TiDrawableReference: (pool-3-thread-1) [111,2473] Problem opening stream with url http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg: Resources/http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg
[ERROR] TiDrawableReference: java.io.FileNotFoundException: Resources/http:/hoge.com/wp-content/uploads/members/44/file_1458700008927-640x426.jpg

試して分かったこと

  • PHPで作成した縮小したJPG画像が表示できない
  • アップロードした元ファイルをhttp経由で参照すると表示可能。気のせいだった?
  • 表示できない画像をローカルに置いて指定すると表示可能
  • 全然関係ない別URLの画像は表示可能
  • Android 4.0.3と5.0.2で起きるので多分すべてのAndroidで起きる
  • 縮小画像の作成をphp-gdからphp-pecl-imagickに変更してみても同じ
  • 表示できない画像を別サーバーにおいてみたら表示できた

 

そして気づいた。。。

node.jsでpath.joinすると「http://」が「http:/」になる。

あるあるケアレスミス。半日潰れた。

 

URLをいい感じに繋げるにはnpmパッケージの「url-join」を使った方が安全。

 

< Related Posts >