我開發了一個應用程序作爲處理基本HTTP請求的服務。當手機接收像一個HTTP POST請求:http ://IP:port/gps/on
,就應該註冊到GPS監聽器類似如下:GPS中的LocationManager requestLocationUpdates()Android
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,200,0,locationListener);
但是,由於這一行代碼的處理程序中,我得到了以下錯誤:
8.614: E/AndroidRuntime(21211): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.os.Handler.<init>(Handler.java:121)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:183)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:183)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:661)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$HttpFileHandler.registerGPS(ConnectService.java:4281)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$HttpFileHandler.handle(ConnectService.java:700)
06-18 12:34:58.614: E/AndroidRuntime(21211): at org.apache.http.protocol.HttpService.doService(HttpService.java:243)
06-18 12:34:58.614: E/AndroidRuntime(21211): at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:187)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$WorkerThread.run(ConnectService.java:4987)
如果我必須爲此使用處理程序/ Looper,請讓我知道嗎?以及如何做到這一點的任何例子。提前致謝!
public String registerGPS(){
String gps= "";
if(!gpsSensor){
if(isGpsOn(appContext))
{
Log.d("GPS on","Using GPS Provider here");
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,200,0,locationListener);
gps = "***********GPS Provider registered here *********************";
}
else
{
Log.d("GPS off","using NETWORK Provider here");
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,200,0,locationListener);
gps = "***********Network provider registered here *********************";
}
}
gpsSensor = true;
return gps;
}
你打這個電話的地方?這只是意味着你需要使用UI線程,而不是在後臺執行操作。 – Rarw
需要看到更多的代碼,你把requestLocationUpdates放在哪裏,我猜是在一個處理器或某種類型的。顯示更多代碼。 – Siddharth
@Rarw嗨,謝謝你的回覆。我有一個創建一個處理所有請求的類的線程。在POST處理程序內部,我需要爲偵聽器註冊GPS。這是我的要求。 – user1741274