I've been getting this error way too often recently, so I've decided to point out some of the causes.
1) using my older desktop pc I cannot use adb to connect to the Android device, but I can see the files on the micro SDCard. Seems to be related to hardware, and not much I could do to fix it. On the other hand, I can use my notebook to connect with adb wihtout any issues.
2) under ubuntu, using latest SDK from google, I remember everything worked smooth: adb shell, adb push, and the others. Suddently, I got this error:
* daemon not running. starting it now *
* daemon started successfully *
error: device not found
Same for adb devices, adb-getstate and so on.
The problem is that we need to run everything with root privileges.
So the correct way to do it is:
sudo ./adb kill-server
sudo ./adb shell
Hope this saves you some precious time.