【Android】Picassoで画像読み込みが失敗する時のチェック項目 Socket failed: EPERM(Operation not permitted)
ドリリウムは移転しました。
約5秒後に自動的にリダイレクトします。
Picassoを使って画像をネット上から読み込むサンプルプログラムを作成していたところ、どうしてもうまく読み込むことができませんでした。
ImageView自体は表示されるのですが、画像がなくて画面は真っ白。
ポイント1:権限を与える
Androidアプリはデフォルトでインターネット接続ができないようです。
そこでAndroidManifest.xmlファイルに権限を与えるため以下の赤字の2行を追記します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gridviewimagesample">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
省略
</application>
</manifest>
ポイント2:エラーメッセージを確認する
Picassoはデフォルトでは画像の読み込みに失敗してもエラーを表示してくれません。
そこで画像の読み込み処理を以下のように書き換えることでログに例外の詳細を出力するようにしてみます。
ImageView img = view.findViewById(R.id.imageView);
Picasso.with(context).setLoggingEnabled(true);
String imgUrl = "画像のURL";
Picasso.Builder builder = new Picasso.Builder(context);
builder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Log.e("picasso error", exception.getMessage());
}
});
Picasso pic = builder.build();
pic.load(imgUrl).into(img);
私の場合には「Socket failed: EPERM(Operation not permitted)」というエラーが出ていることがわかりました。
ポイント3:エミュレーター上のアプリをアンインストールする
Picassoの使用自体はとっても簡単です。
ここまでのチェックポイントを確認しても原因がわからない場合には全く異なる点が原因の可能性があります。
そこで問題の切り分けのためにエミュレーター上のアプリをアンインストールしてみましょう。
エミュレーターのアプリ一覧から対象アプリを長押しすると「アプリ情報」というメニューが表示されるためタップします。
そこから「アンインストール」して再度Android Studioから起動してみてください。