Update:
Before you read this article, make sure you have not saved the same number under two contacts. In this case, Google hangouts will not show the name for the number.
I have a friend in USA whose number is +1-***-***-****. Cannot remember when it started, Google hangouts (SMS function) did not show this friend's name anymore. Instead, it showed the number, without the +1 prefix. This friend and the number were in my contact list; all other messages from other contacts were not affected. If I used other SMS apps from Google play store, this issue did not exist. It looked like a bug of Google hangouts.
I followed the solution described at https://productforums.google.com/forum/#!msg/hangouts/h55Ur77xwxc/m0xAWw5BuJkJ, but no luck. After a few tests, I decided to give up on hangouts. Google may have good ideas, but their software is not well made.
However, I would like to dig further. I used SMS backup & restore app to backup all my messages. Then downloaded them to my computer and checked the messages from the friend. At that time, I thought I might be able to solve the problem.
Because of unknown reasons, two of the messages between my friend and me used the number ***-***-**** instead of +1-***-***-**** . Since I was in Australia, how it could happen still puzzled me. Furthermore, hangouts thought ***-***-**** and +1-***-***-**** were not equal, but still grouped the messages together.
I changed the number to the +1 format, uploaded the file back to my phone, erased all SMS on the phone, and then restored the messages using the SMS Backup & Restore app. Finally buggy hangouts showed my friend's name, not the number.