AndroidのImageViewにリモートURL指定で表示できない?
Titaniumの開発で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 >