在我的应用程序中,我想解析天气xml api,但在解析api的URL时会出现异常。这是logcat的屏幕截图。
从logcat观察中,异常出现在第654行,我在第654行有xr.parse(new InputSource(url.openStream()));
语句但是,我不知道如何解决问题。你可以查看下面代码中的语句。请帮助我这方面。您的回复将受到高度赞赏。提前谢谢。
这是我的代码。
private void parseWeatherURL(String strURL)
{
try
{
String weatherURL="http://api.worldweatheronline.com/free/v1/weather.ashx?key=476yv2t87x67j5pzb7hbazn6&q=34.25,71.014&cc=yes&num_of_days=5&format=xml";
/* Replace blanks with HTML-Equivalent. */
URL url = new URL(weatherURL.replace(" ", "%20"));
Log.e("Weather", "URL");
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
Log.e("Weather", "SAX");
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
com.ifahja.weather.WeatherHandler myWeatherHandler = new com.ifahja.weather.WeatherHandler();
xr.setContentHandler(myWeatherHandler);
Log.e("Weather", "Handler");
/* Parse the xml-data our URL-call returned. */
xr.parse(new InputSource(url.openStream()));
//Log.d(TAG, "it's all right");
Log.e("Weather URL", "it's all right");
}
catch(Exception e)
{
Log.e("Problem", "parseWeatherURL()");
e.printStackTrace();
}
}
答案 0 :(得分:1)
您是在UI线程之外进行网络呼叫吗?因为你有NetworkOnMainThreadException ...
如果没有,请使用AsyncTask。例如:
或者
您可以使用 Android异步Http客户端库。非常简单的库,小尺寸(25kb),易于使用和异步。代码将类似于:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.dfsdfsdfsdfsd.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
// Here is your content !
}
});
可用here。
否则,您可能希望将呼叫切换为单独呼叫并检查空值
URLConnection urlcon = url.openConnection();
urlcon.setReadTimeout(10000);
InputStream is = urlcon.getInputStream();
答案 1 :(得分:0)
您无法在主UI线程上进行此调用。尝试创建AsyncTask
,然后调用其中的方法。 http://developer.android.com/reference/android/os/AsyncTask.html