1

アプリケーションに機能があり、ユーザーがボタンをクリックすると、最寄りのオフィスが表示されます。機能はスウェーデンの一部で機能しますが、スウェーデン北部では機能しません。try-catch ステートメントを使用して、null ポインター例外をキャッチします。ネットワークとロケーションをシャットダウンすると、エラー メッセージが表示されますが、スウェーデン北部ではメッセージは表示されず、アプリがクラッシュするだけです。私のコードはそこにあります。onFindOfficeClick () は単一の関数であり、独立しています。どうすればこの問題を解決できますか? デバッグを試みましたが、エラーが発生しません...どうすればよいかわかりません。xml ファイルからすべての座標を取得します。何か提案はありますか?

private void onFindOfficeClick() {
    try {
        LocationManager lm = (LocationManager)getSystemService(Service.LOCATION_SERVICE);
        List<String> providersName = lm.getProviders(false);
        if(providersName.size()>0){
            Location location = lm.getLastKnownLocation(providersName.get(0));
            float results [] = new float [1];
            final double longitude = location.getLongitude();
            final double latitude = location.getLatitude();
            final int officeCount = mOfficesInfo.length;
            double minDistance = 0;
            int officeNum = 0;
            for(int i=0; i<officeCount; i++){
                Location.distanceBetween(latitude, longitude,
                        mOfficesInfo[i].getLatitude(), mOfficesInfo[i].getLongitude(), results);
                if(i==0){
                    minDistance = results[0];
                } else if(results[0]<minDistance){
                    minDistance=results[0];
                    officeNum = i;
                }
            }
            int countryPosition = mCountries.indexOf(mOfficesInfo[officeNum].getCountry());
            mCountrySpiner.setSelection(countryPosition);
            mFindedOfficeName = mOfficesInfo[officeNum].getOfficeName();
            mOfficesSpiner.setSelection(officeNum);
        }
    }
    catch (NullPointerException e)
    {
        Toast.makeText(getApplicationContext(),"check your network and GP:s connections",Toast.LENGTH_SHORT).show();
    }
}
4

1 に答える 1

0

呼び出す前に null チェックを入れる

LocationManager lm = (LocationManager)getSystemService(Service.LOCATION_SERVICE);

if(lm!=null){
   lm.getProviders(false);.
 }

また、そうかもしれません

        Location location = lm.getLastKnownLocation(providersName.get(0));

ロケーション変数でnullを指定するので、コードを変更して、場所から緯度と経度を取得する前にnullチェックを入れてください。

 if(location!=null){

      final double longitude = location.getLongitude();
      final double latitude = location.getLatitude();
 }

コードで NullPointerException をキャッチすることはお勧めできません。

于 2013-01-06T18:11:53.847 に答える