我在使用 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/cornell-university/没有照片http://www.forbes.com/colleges/columbia-university-in-the-city-of-new-york/ http://www.forbes.com/colleges/columbia-university-in-the-city-of-new-york/有照片吗
您需要检查您的照片元素是否确实包含项目
Document doc = Jsoup.connect("http://www.forbes.com/colleges/"+college+"/").get();
Elements photos = doc.select("div[id=photos]");
if(photos!=null && photos.size() > 0){
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");
}
注意photos.size() > 0
我添加到你的 if 语句中。select(..)中的陈述Jsoup如果没有元素,则不会返回 null。他们将返回一个空的Elements list. http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#select(java.lang.String)您只需要检查尺寸photos
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)