【发布时间】:2014-09-22 15:48:35
【问题描述】:
我在使用 Jsoup 解析网站时收到 NullPointerException。被解析的实际网页会根据用户输入而变化。本质上,网页上有时有图片,有时没有。
Document doc = Jsoup.connect("http://www.forbes.com/colleges/"+college+"/").get();
Elements photos = doc.select("div[id=photos]");
if(photos!=null){
imgSrc1 = photos.select("li").select("img").first().attr("src");
input1 = new java.net.URL(imgSrc1).openStream();
bitmap1 = BitmapFactory.decodeStream(input1);
image1.setImageBitmap(bitmap1);
}else{
buffer.append("No Pictures");
}
到目前为止,对于有图片的网页,它们可以正常显示。对于那些没有图像的人,我会抛出 NPE。我尝试通过检查 id "photos" 是否存在来防止它,但我仍然收到错误消息。
Logcat:
07-30 16:24:43.497: E/AndroidRuntime(30847): FATAL EXCEPTION: main
07-30 16:24:43.497: E/AndroidRuntime(30847): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.collegeselector/com.collegeselector.CollegeInfo}: java.lang.NullPointerException
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.os.Looper.loop(Looper.java:137)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread.main(ActivityThread.java:5039)
07-30 16:24:43.497: E/AndroidRuntime(30847): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 16:24:43.497: E/AndroidRuntime(30847): at java.lang.reflect.Method.invoke(Method.java:511)
07-30 16:24:43.497: E/AndroidRuntime(30847): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-30 16:24:43.497: E/AndroidRuntime(30847): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-30 16:24:43.497: E/AndroidRuntime(30847): at dalvik.system.NativeStart.main(Native Method)
07-30 16:24:43.497: E/AndroidRuntime(30847): Caused by: java.lang.NullPointerException
07-30 16:24:43.497: E/AndroidRuntime(30847): at com.collegeselector.CollegeInfo.onCreate(CollegeInfo.java:92)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.Activity.performCreate(Activity.java:5104)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-30 16:24:43.497: E/AndroidRuntime(30847): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-30 16:24:43.497: E/AndroidRuntime(30847): ... 11 more
我应该怎么做才能解决这个问题?
示例链接: http://www.forbes.com/colleges/cornell-university/ 没有照片 http://www.forbes.com/colleges/columbia-university-in-the-city-of-new-york/有照片
【问题讨论】:
-
如果没有照片,您确定
<div id="photos">真的消失了吗?听起来它仍然存在于 html 中,它只是空的。您可能需要解除对photos.select("li").select("img").first().attr("src");的调用,并检查每个调用是否具有非空Elements -
您能提供一个您在 jsoup.connect 方法中发送的大学字符串示例吗?
-
@dymmeh 没有。在链接forbes.com/colleges/columbia-university-in-the-city-of-new-york 中有。但在链接 www.forbes.com/colleges/cornell-university/ 中甚至不存在。@RJadhav 我在问题中添加了一些示例链接。感谢您的快速响应您是否仍在使用具有 div id=photos 的有效大学链接获取 npe?
标签: java android nullpointerexception html-parsing jsoup