Android:NetworkOnMainThreadException未调用

Android:NetworkOnMainThreadException未调用,android,Android,我熟悉Android开发,在UIThread上进行网络调用时,我习惯于NetworkOnMainThreadException异常 但是,在以下情况下,会引发IOException,并且不会引发NetworkOnMainThreadException 代码: 我觉得这很奇怪。网络异常(运行时异常)不应该被抛出吗?如果您在上检查实现,那么IOException是被检查的异常,并且从代码中抛出。 为了便于参考,我在上面的链接中添加了实现,更多信息可以在实现中的注释中找到 public List<

我熟悉Android开发,在UIThread上进行网络调用时,我习惯于
NetworkOnMainThreadException
异常

但是,在以下情况下,会引发IOException,并且不会引发
NetworkOnMainThreadException

代码:


我觉得这很奇怪。网络异常(运行时异常)不应该被抛出吗?

如果您在上检查实现,那么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文档中的公共列表可能会有所帮助。
希望这能回答您的问题。

如果您检查了上的实现,那么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文档中的公共列表可能会有所帮助。
希望这能回答您的问题。

如果
mGeo
Geocoder
,您不是在自己的流程中进行网络I/O。如果
mGeo
Geocoder
,您不是在自己的流程中进行网络I/O。谢谢……这很有意义。因此,它基本上只是GeoServices的API设计选择。我以前的印象是,Android总是知道网络调用何时发生,并且保证在调用过程中抛出运行时异常。是的,正如Commonware所说,如果您在自己的进程上进行网络调用,那么您需要处理NetworkOnMainThreadException。谢谢……这很有意义。因此,它基本上只是GeoServices的API设计选择。我以前的印象是,Android总是知道网络调用何时发生,并保证在调用过程中引发运行时异常。是的,正如Commonware所说,如果您在自己的进程上进行网络调用,那么您需要处理NetworkOnMainThreadException。