java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()
<p>I'm pulling a html page from the web. The page contains images and I load the images with <strong>UILImageGetter</strong>. </p>

<p>The problem is that if the page just begins to load and I rotate the device multiple times the app crashes with an NPE.</p>

<p><strong>UILImageGetter</strong></p>

<pre><code>public class UILImageGetter implements Html.ImageGetter{
    Context c;
    TextView container;
    UrlImageDownloader urlDrawable;


    public UILImageGetter(View textView, Context context) {
        this.c = context;
        this.container = (TextView) textView;
    }

    @Override
    public Drawable getDrawable(String source) {
        urlDrawable = new UrlImageDownloader(c.getResources(), source);
        if (Build.VERSION.SDK_INT &gt;= 21) {
        urlDrawable.mDrawable = c.getResources().getDrawable(R.drawable.default_thumb,null);
        } else {
            urlDrawable.mDrawable = c.getResources().getDrawable(R.drawable.default_thumb);
        }
        ImageLoader.getInstance().loadImage(source, new SimpleListener(urlDrawable));
        return urlDrawable;
    }

    private class SimpleListener extends SimpleImageLoadingListener {
        UrlImageDownloader mUrlImageDownloader;

        public SimpleListener(UrlImageDownloader downloader) {
            super();
            mUrlImageDownloader= downloader;
        }

        @Override
        public void onLoadingStarted(String imageUri, View view) {
            Log.d("DEBUG", "onLoadingStarted called");
            //spinner.setVisibility(View.VISIBLE);

        }

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            //spinner.setVisibility(View.GONE);

            int width = loadedImage.getWidth();
            int height = loadedImage.getHeight();

            int newWidth = width;
            int newHeight = height;

            if (width &gt; container.getWidth()) {
                newWidth = container.getWidth();
                newHeight = (newWidth * height) / width;
            }

            if (view != null) {
                container.getLayoutParams().width = newWidth;
                container.getLayoutParams().height = newHeight;
            }

            Drawable result = new BitmapDrawable(c.getResources(), loadedImage);
            result.setBounds(0, 0, newWidth, newHeight);

            mUrlImageDownloader.setBounds(1, 1, newWidth, newHeight);
            mUrlImageDownloader.mDrawable = result;
            container.invalidate();

            container.setText(container.getText());

        }

        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            String message = null;
            switch (failReason.getType()) {
                case IO_ERROR:
                    message = "Input/Output error";
                    break;
                case DECODING_ERROR:
                    message = "Image can't be decoded";
                    break;
                case NETWORK_DENIED:
                    message = "Downloads are denied";
                    break;
                case OUT_OF_MEMORY:
                    message = "Out Of Memory error";
                    break;
                case UNKNOWN:
                    message = "Unknown error";
                    break;
            }
            Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
            //spinner.setVisibility(View.GONE);
        }
    }

    private class UrlImageDownloader extends BitmapDrawable {
        public  Drawable mDrawable;

        public UrlImageDownloader(Resources resources, String filepath) {
            super(resources, filepath);
            mDrawable = new BitmapDrawable(resources, filepath);
        }

        @Override
        public void draw(Canvas canvas) {
            if (mDrawable != null) {
                mDrawable.draw(canvas);
            }
        }
    }
}
</code></pre>

<p><strong>DetailsFragment</strong></p>

<pre><code>public class DetailsFragment extends Fragment implements ObservableScrollViewCallbacks{


    private AlertDialog internetDialog;
    private AlertDialog sthWrongAlert;
    private String url;

    private String birdData;

    private final String TAG = "DetailsFragment";
    protected com.nostra13.universalimageloader.core.ImageLoader mImageLoader;


    TextView birdContent;
    public DetailsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        url = getArguments().getString("bird_link");

        // Inflate the layout for this fragment
        view =  inflater.inflate(R.layout.fragment_details, container, false);

        showDialog();
        sthWrongDialog();

        gadContent = (TextView) view.findViewById(R.id.gad_content);


        DisplayImageOptions defaultoptions = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .build();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity())
                .defaultDisplayImageOptions(defaultoptions)
                .writeDebugLogs()
                .build();


        mImageLoader = com.nostra13.universalimageloader.core.ImageLoader.getInstance();
        mImageLoader.init(config);





        if (savedInstanceState != null) {
            birdData = savedInstanceState.getString("birdData");
            if (birdData != null) {
                parseHtml(birdData);
            } 
            } else if (NetworkCheck.isAvailableAndConnected(getActivity())){
                    loadBird();
                } 
            }
        } else {
            if (NetworkCheck.isAvailableAndConnected(getActivity())) {
                    loadGad();
                }
            } else {
                internetDialog.show();
            }
        }
        return view;
    }


    public interface OnLinkClickedListener {
        public void OnLinkClicked (String link);
    }

    private static OnLinkClickedListener sLinkCallbacks = new OnLinkClickedListener() {
        @Override
        public void OnLinkClicked(String link) {

        }
    };


    private void showDialog() {
        internetDialog = new AlertDialog.Builder(getActivity())
                // The usuals
                .create();
    }

    private void sthWrongDialog() {
        sthWrongAlert = new AlertDialog.Builder(getActivity())
                // The usuals
                .create();
    }

    private void loadBird() {
        Log.d(TAG, "loadBird called");

        final ProgressBar progressBar;
        progressBar = (ProgressBar) view.findViewById(R.id.progress_circle);
        progressBar.setVisibility(View.VISIBLE);


//        String news_id = getIntent().getStringExtra("BirdId");
        Log.d(TAG, "You clicked bird id " + url);

        StringRequest stringRequest = new StringRequest(url,
                new Response.Listener&lt;String&gt;() {
                    @Override
                    public void onResponse(String response) {
                        //Log.d("Debug", response.toString());
                        if (progressBar != null) {
                            progressBar.setVisibility(View.GONE);
                        }
                        parseHtml(response);
                        birdData = response;


                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());

                        if (progressBar != null) {
                            progressBar.setVisibility(View.GONE);
                        }
                        if (sthWrongAlert != null) {
                            sthWrongAlert.show();
                        }


                    }
                });

        //Creating requestqueue
        RequestQueue requestQueue = Volley.newRequestQueue(getActivity());

        //Adding request queue
        requestQueue.add(stringRequest);
    }

    private void parseHtml(String response) {
        Log.d(TAG, "parsinghtml");
        Document document = Jsoup.parse(response);
        bird_content = document.select("div.entry-content").first().html();
        setTextViewHTML(birdContent, bird_content);
    protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
    {
        int start = strBuilder.getSpanStart(span);
        int end = strBuilder.getSpanEnd(span);
        int flags = strBuilder.getSpanFlags(span);
        ClickableSpan clickable = new ClickableSpan() {
            public void onClick(View view) {
                Log.e(TAG, "on click" + span.getURL());
            }
        };
        strBuilder.setSpan(clickable, start, end, flags);
        strBuilder.removeSpan(span);
    }

    protected void setTextViewHTML(TextView text, String html) {
        CharSequence sequence = Html.fromHtml(html, new UILImageGetter(birdContent, getActivity()), null);
        SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
        URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
        for(URLSpan span : urls) {
            makeLinkClickable(strBuilder, span);
        }
        text.setText(strBuilder);
        text.setMovementMethod(LinkMovementMethod.getInstance());
    }

       @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (birdData != null) {
            outState.putString("birdData", birdData);
        }

        if (internetDialog != null) {
            outState.putBundle("internetDialog", internetDialog.onSaveInstanceState());
        }
        if (sthWrongAlert != null) {
            outState.putBundle("sthWrongAlert", sthWrongAlert.onSaveInstanceState());
        }
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            if (internetDialog != null) {
                internetDialog.onRestoreInstanceState(savedInstanceState.getBundle("internetDialog"));
            }
            if (sthWrongAlert != null) {
                sthWrongAlert.onRestoreInstanceState(savedInstanceState.getBundle("sthWrongAlert"));

            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy called");
        if (mImageLoader.isInited()) {
            mImageLoader.destroy();
        }


        if (internetDialog != null){
            internetDialog.dismiss();
            internetDialog = null;
        }
        if (sthWrongAlert != null) {
            sthWrongAlert.dismiss();
            sthWrongAlert = null;
        }
    }

}
</code></pre>

<p><strong>StackTrace</strong></p>

<pre><code>05-19 13:37:14.936 12213-12213/com.pexample.birds E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.pexample.birds, PID: 12213
                                                                     java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                         at com.pexample.birds.UILImageGetter.getDrawable(UILImageGetter.java:39)
                                                                         at android.text.HtmlToSpannedConverter.startImg(Html.java:634)
                                                                         at android.text.HtmlToSpannedConverter.handleStartTag(Html.java:520)
                                                                         at android.text.HtmlToSpannedConverter.startElement(Html.java:761)
                                                                         at org.ccil.cowan.tagsoup.Parser.push(Parser.java:794)
                                                                         at org.ccil.cowan.tagsoup.Parser.rectify(Parser.java:1061)
                                                                         at org.ccil.cowan.tagsoup.Parser.stagc(Parser.java:1016)
                                                                         at org.ccil.cowan.tagsoup.HTMLScanner.scan(HTMLScanner.java:624)
                                                                         at org.ccil.cowan.tagsoup.Parser.parse(Parser.java:449)
                                                                         at android.text.HtmlToSpannedConverter.convert(Html.java:442)
                                                                         at android.text.Html.fromHtml(Html.java:136)
                                                                         at com.pexample.birds.DetailsFragment.setTextViewHTML(DetailsFragment.java:400)
                                                                         at com.pexample.birds.DetailsFragment.parseHtml(DetailsFragment.java:350)
                                                                         at com.pexample.birds.DetailsFragment.access$500(DetailsFragment.java:48)
                                                                         at com.pexample.birds.DetailsFragment$6.onResponse(DetailsFragment.java:291)
                                                                         at com.pexample.birds.DetailsFragment$6.onResponse(DetailsFragment.java:284)
                                                                         at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
                                                                         at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
                                                                         at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                                         at android.os.Handler.handleCallback(Handler.java:739)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                         at android.os.Looper.loop(Looper.java:135)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
</code></pre>

<p>From the stacktrace, line 39 is <code>urlDrawable = new UrlImageDownloader(c.getResources(), source);</code> in <strong>UILImageGetter</strong> and line 400 corrsponds to line <code>CharSequence sequence = Html.fromHtml(html, new UILImageGetter(birdContent, getActivity()), null);</code> 
in <strong>DetailsFragment</strong>.</p>

<p>Please, how do I fix this?</p>

<p>Please this not <a href="https://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it">a duplicate of this question</a>. I know what a NPE and what causes it and maybe I am wrong but I also know that I will have to check if the resource is null before line <code>urlDrawable = new UrlImageDownloader(c.getResources(), source);</code> but I just don't know how to do that. I am lost here, please help me.</p>

<hr>

<h2>EDIT</h2>

<p><strong>onCreate of hosting Activity</strong></p>

<pre><code>@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post);


        getWindow().getDecorView().setBackgroundColor(Color.WHITE);

        String bird_id = getIntent().getStringExtra("BirdId");
        Log.d(TAG,  bird_id);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        if (savedInstanceState == null) {
            Bundle bundle = new Bundle();
            Fragment fragment;

            fragment = new DetailsFragment();
            bundle.putString("bird_link", bird_id);
            fragment.setArguments(bundle);

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(android.R.anim.slide_out_right, android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.slide_in_left);
            ft.add(R.id.post_frame, fragment);
            ft.commit();
        }

        if (savedInstanceState != null) {
            mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent");
        }



    }
</code></pre>