繁体   English   中英

NullPointerException解析Jsoup

[英]NullPointerException Parsing Jsoup

使用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“照片”来阻止它,但是仍然出现错误。

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-纽约/确实有照片

您需要检查您的照片元素是否实际包含物品

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语句中。 如果没有元素,则Jsoup select(..)语句将不会返回null。 他们将返回一个空的Elements列表。 您只需要检查photos的大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM