Android

VolleyのNetworkImageViewでNullPointerExceptionがthrowされてる件

More than 5 years have passed since last update.

エラーレポート見たらNetworkImageViewでぬるぽ(NullPointerException)がthrowされてる。

java.lang.NullPointerException

at com.android.volley.Request.(ProGuard:129)
at com.android.volley.toolbox.ImageRequest.(ProGuard:71)
at com.android.volley.toolbox.ImageLoader.get(ProGuard:220)
at com.android.volley.toolbox.ImageLoader.get(ProGuard:171)
at com.android.volley.toolbox.NetworkImageView.loadImageIfNecessary(ProGuard:150)
at com.android.volley.toolbox.NetworkImageView.onLayout(ProGuard:193)
at android.view.View.layout(View.java:

アプリ側はアップデートしてないのにどういうことなの…


状況

・VolleyのNetworkImageViewを使用してサムネイルを表示してる

・異常に気づく前まで正常に動いていた

・アプリ側はアップデートとかしていない


原因

スタックトレース見てみるとVolleyのRequest.javaの129行目でエラーでてるみたい

mDefaultTrafficStatsTag = TextUtils.isEmpty(url) ? 0: Uri.parse(url).getHost().hashCode();

あ。。。。。 Uri.parse(url)でnullが返ってきているから落ちてるのか。


原因はサーバ側で返しているURLがURI形式でない変な文字列を返していたことだった。

以下の場合ぬるぽがthrowされる

String url = "hoge";

NetworkImageView networkImageView = new NetworkImageView(context);
networkImageView.setImageUrl(url); // ぬるぽで落ちる

とりあえずの回避方法としては、

NetworkImageView networkImageView = new NetworkImageView(context);

if (TextUtils.isEmpty(url) || Uri.parse(url).getHost() == null) {
// エラー情報をAnalyticsのイベントとかで送信してあげるといいかも
} else {
networkImageView.setImageUrl(url);
}