YouTube Data API から取得した、データを Gson を使ってパースしようとしているのですが、対応するクラスについて、一つ疑問があります。リファレンスを拝見すると publishedAt の型は、 datetime となっていますが、次の例のように、 Gson では Date 型で当てはめてもいいのでしょうか、

コード:

public class Snippet {
    public Date publishedAt;
    public String title;
    public String description;
    public Thumbnails thumbnails;
}

これを実行したところ、独自に作成した CustomAdapter で以下の NullPointerException が出てしまいました。

エラー:

java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.Date.getTime()' on a null object reference

CustomAdapter:

public class CustomAdapter extends ArrayAdapter<Items> {
private LayoutInflater layoutInflater;
private ImageLoader mImageLoader;
private RequestQueue mQueue;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

public CustomAdapter(Context context, int textViewResourceId, List<Items> objects, RequestQueue queue){
    super(context, textViewResourceId, objects);
    layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mImageLoader = new ImageLoader(queue, new LruCacheClass());
}

static class ViewHolder{
    ImageView image;
    TextView title;
    TextView maker;
    TextView numView;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
    ViewHolder holder;
    Items item = getItem(position);
    String url = item.snippet.thumbnails.high.url;

    if(convertView==null){
        convertView = layoutInflater.inflate(R.layout.list_search, parent, false);

        holder = new ViewHolder();
        holder.image = (ImageView)convertView.findViewById(R.id.iv_thumbnail);
        holder.title = (TextView)convertView.findViewById(R.id.tv_movie_title);
        holder.maker = (TextView)convertView.findViewById(R.id.tv_maker);
        holder.numView = (TextView)convertView.findViewById(R.id.tv_day_num_view);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder)convertView.getTag();
    }

    ImageLoader.ImageListener listener = ImageLoader.getImageListener(holder.image,
            android.R.drawable.spinner_background,
            android.R.drawable.ic_dialog_alert);

    mImageLoader.get(url, listener);

    holder.title.setText(item.snippet.title);
    holder.maker.setText(item.channelTitle);
    //この行でNullPointerExceptionがでてしまう。
    holder.numView.setText(sdf.format(item.snippet.publishedAt.getTime()));

    return convertView;
}
}

また、 publishedAt でタイムゾーンに依存させたいので、こちらのサイトを参考にして Gson を編集しています。

BuildGson:

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * Created by zousan on 2015/01/25.
 */
public class BuildGson {
public static Gson buildGsonForPublishedAt() {
    GsonBuilder gb = new GsonBuilder();

    gb.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
        @Override
        public Date deserialize(JsonElement dateElement, Type arg1, JsonDeserializationContext arg2)
                throws JsonParseException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.s'Z'");
            sdf.setTimeZone(TimeZone.getDefault());

            String date = dateElement.getAsString();
            try {
                return sdf.parse(date);
            } catch (ParseException e) {
                //System.err(String.format("Gsonのパースに失敗しました: %s", date));
                return null;
            }
        }
    });

    gb.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
    return gb.create();
}
}

改善点等ありましたら教えていただけると助かります。