He's never going to be perfect. Not like the guys in the fairytales. He won't always be cheerful. Make efforts for him too. Ask him how his day went. Ask him what went wrong. Love him as well. Be patient with him too. Give him the freedom to do the things that he likes. Do not box him. Do not choke him in the neck. The truth is if he really loves you he will never do things that will hurt you. He has a life to live so do not take that away from him. You are not his world. You are just a part of it. At some point he will be inconsistent. He will be impatient. Sometimes it will be hard for him to handle your mood swings. He gets angry too. His mood changes as well. You have to respect his choices and decisions. Give him the respect that he deserves.
Like you, he needs attention too. He needs reassurance as well that he is the only one for you. Do not give him reasons to doubt. There will never be a perfect man. At some point you will get disappointed and upset because he did not become the man you expect him to be. But because you love him you accept every bits of him. If he is worth the risk,keep him.
Sometimes we want to be understood so much, that we forget to understand men as well.