Retaining and passing data between Activities
Fixing a NullPointerException is not under the scope of Code Review, but you should be able to solve that problem by looking at a previous answer of mine where I'm describing How to make a singleton in Android. This might fix your problem. (The short answer is: Use the built-in Application class that Android manages for you)

I have some other comments regarding your questions:


Avoid the Singleton pattern in Android everywhere.
I personally haven't used Parcelable, but I believe it is the recommended approach. If you think implementing it would violate Single Responsibility Principle, then create a delegating wrapper object that implements Parcelable and just more or less stores a reference to the real object.
Or serialize things using the Jackson Library (I wouldn't do this for the simple task of passing data between activities though)
Another alternative for you is to use Fragments. By using fragments properly, you could keep the Post state in your activity, and let the Fragments use a callback on your activity to save parts of the post step-by-step, until it is finally finished in which case you perform the final save of it.




As for the rest of the code in your question, I got just a few comments:


DataHolder is a too generic name. What kind of data is it holding? Sooner or later you might end up with multiple DataHolders.
What if your mediaType would accidentally end up with the value 4? Use an enum to make sure that doesn't happen. And to make your code better. Limited alternatives should always point you to an enum.

public enum MediaType {
    PHOTO, VIDEO, TEXT, PLACE;
}