2016-04-03 7 views
1

私はAndroid開発に精通しており、UIThreadでネットワークコールを行うときにはNetworkOnMainThreadException例外を使用していました。Android:NetworkOnMainThreadExceptionが呼び出されていません

ただし、次の場合はIOExceptionがスローされ、NetworkOnMainThreadExceptionはスローされません。

コード:

 try { 
      a = mGeo.getFromLocationName("SFO", 1); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

私は、これは奇妙見つけます。実行時例外であるネットワーク例外はスローされませんか?

+2

'mGeo'が' Geocoder'の場合、あなた自身のプロセスでネットワークI/Oを自分でやっていません。 – CommonsWare

答えて

4

linkで実装をチェックすると、IOExceptionがチェックされた例外で、コードからスローされます。私はより多くのリンクの上から実装を追加してい参照用 は実装で、コメントに記載されています

public List<Address> getFromLocationName(String locationName, int maxResults) throws IOException { 
if (locationName == null) { 
    throw new IllegalArgumentException("locationName == null"); 
} 
try { 
    List<Address> results = new ArrayList<Address>(); 
    String ex = mService.getFromLocationName(locationName, 
     0, 0, 0, 0, maxResults, mParams, results); 
    if (ex != null) { 
     throw new IOException(ex); 
    } else { 
     return results; 
    } 
} catch (RemoteException e) { 
    Log.e(TAG, "getFromLocationName: got RemoteException", e); 
    return null; 
} 
} 

それはJavaのドキュメントからこのlinkのRuntimeExceptionを拡張するようNetworkOnMainThreadExceptionはチェックされない例外です助けるかもしれません。 これはあなたの質問にお答えします。

+0

ありがとう...それはたくさんの意味があります。したがって、GeoServicesの基本的なAPI設計の選択肢でした。以前は、Androidのネットワークコールがいつ起きているかを常に知っていて、呼び出しプロセスでランタイム例外が発生することが保証されていたという印象を受けました。 – arhoskins

+0

はい、あなた自身のプロセスでネットワークコールを行っている場合は、NetworkOnMainThreadExceptionを処理する必要があります。 – RamIndani

関連する問題