1

Android Gingerbread(および古いAndroidバージョン)で徹底的にテストされ、正常に動作しているアプリがあります。私はAndroidオペレーティングシステムの新しいバージョンを実行している携帯電話がNetworkOnMainThreadExceptionを投げているというユーザーの報告されたクラッシュエラーから気付いた。GeoCoderのgetFromLocationメソッドにより、NetworkOnMainThreadExceptionがスローされる可能性がありますか?

私は自分のコードを実行し、すべての犯人を排除/修正しようとしています。 main/uiスレッドから呼び出された場合、GeoCodergetFromLocationgetFromLocationNameのメソッドはNetworkOnMainThreadExceptionになりますか?

答えて

10

は、これらのGeocoder方法のように思えると任意のネットワークやI/Oの呼び出しがNetworkOnMainThreadExceptionを投げるしようとしています。だから疑問があれば別のスレッドに貼り付けてください!ここで

は別のスレッドからGeoCoder.getFromLocation()メソッドをコールする方法の例です:

new AsyncTask<GeoPoint, Void, Address>() 
{ 
    @Override 
    protected Address doInBackground(GeoPoint... geoPoints) 
    { 
    try 
    { 
     Geocoder geoCoder = new Geocoder(context); 
     double latitude = geoPoints[0].getLatitudeE6()/1E6; 
     double longitude = geoPoints[0].getLongitudeE6()/1E6; 
     List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1); 
     if (addresses.size() > 0) 
     return addresses.get(0); 
    } 
    catch (IOException ex) 
    { 
     // log exception or do whatever you want to do with it! 
    } 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Address address) 
    { 
    // do whatever you want/need to do with the address found 
    // remember to check first that it's not null 
    } 
}.execute(myGeoPoint); 
関連する問題