次の問題があります。ルーパーを使用したスレッドのこの実装があります。
public class GeoLocationThread extends Thread{
public Handler handler;
private General general;
public void run(){
Looper.prepare();
handler = new IncomingHandler(general);
Looper.loop();
}
public GeoLocationThread(General general){
this.general=general;
}
private static class IncomingHandler extends Handler{
private final WeakReference<General> mService;
IncomingHandler(General service) {
mService = new WeakReference<General>(service);
}
@Override
public void handleMessage(Message msg)
{
General service = mService.get();
if (service != null) {
Location location=service.getLl().getLocation();
if(location.getAccuracy()<40){
service.setOrigin(new GeoPoint((int) (location.getLatitude() * 1E6),(int) (location.getLongitude() * 1E6)));
}
}
}
}
}
そして、私は次のことをしたいと思います:
GeoLocationThread locationThread=new GeoLocationThread(this);
locationThread.start();
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll, locationThread.handler.getLooper());
lm は LocationManager です。私のログとテストからlocationThread.handler.getLooper()
、ルーパーの代わりに null を返すと言えます。
なぜそれがヌルなのかわかりません。locationThread.isAlive()
trueを返したものを呼び出そうとしました。locationThread.handler;
また、null ではないことがわかっているものを取得しようとしました。私もたくさんのグーグルをしましたが、ドキュメンテーション以上のものは見つかりませんでした。
ご回答ありがとうございます。