LoginSignup
4
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-01

エラーレポート見たら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);
}
4
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4