2011-12-15 7 views
1

私は自分のアプリケーションを使って場所を見つけることができましたが、いくつかのコードを変更したところ、場所は常にnullを返します。恥ずかしいことに、私はどのコードを変更したのか分かりませんが、私はちょうどそれを働かせることはできません。Androidの場所は常にnull

これはなぜnullを返すのですか?私は一日中、喜んでこんなことをしています。以下 コード:

....imports.... 

public class Clue extends Activity { 

public static double latitude; 
public static double longitude; 
Criteria criteria; 
LocationManager lm; 
LocationListener ll; 
Location location; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.questions); 

    criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    ll = new MyLocationListener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 

areWeThereYet(); 
} 

    private void areWeThereYet() 
    { 
     if(weAreThere()) 
     { 
     showMsgBox("There"); 
    } 
    else if(location!=null) 
     toastMsg("not there"); 
     } 

    private boolean weAreThere() { 

location = getLocation(); 
if (location!=null) 
{ 
longitude = location.getLongitude(); 
latitude = location.getLatitude(); 
return inCorrectPlace(question); 
} 
else 
{ 
    toastMsg("Location not ready yet"); 
    return false; 
} 
} 

private Location getLocation() { 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
     return lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
} 

} 

public class MyLocationListener implements LocationListener 
{ 
    public void onLocationChanged(Location loc) 
    {   
     Clue.longitude = loc.getLongitude(); 
     Clue.latitude = loc.getLatitude(); 
    } 
} 

私はすべての権限を追加し、あなたはすべての起こっているのかを見ることができるように私のコードを簡素化しています。

おかげで、

ベン

+0

将来のためのちょっとした提案:あなたのコードをバージョン管理に入れてください! –

+0

私は通常、これはちょっとしたプロジェクトだったので、私は気にしませんでした。 –

+1

デバイスやエミュレータでこれを実行していますか?デバイスの場合は、GPSがオフになっていないことを確認してください。エミュレータの場合は、locationManagerが返す場所があるように、DDMSを使用して場所を少なくとも1回送信する必要があると思いますか? – Kaediil

答えて

1

あなたが最初のonCreateであなたの活動を開始したとき、それはまだ準備ができていないので、それがnullです。最終的にonLocationChanged経由で位置更新を取得すると、Clueクラスにlat/lonを設定しますが、それだけです... areWeThereYetメソッドを再呼び出しすることはありません。あなたの場所を更新したら、そのメソッドを呼び出す必要があります。

+0

ボタンクリックでも呼び出されますが、しばらく待ってもnullが返されます。何か案は? –

+0

場所はまだヌルとして通っていますが、これはなぜでしょうか? –

関連する問題