【问题标题】:NullPointerException Parsing JsoupNullPointerException 解析 Jsoup
【发布时间】: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


【解决方案1】:

您需要检查您的照片元素是否确实包含项目

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");
}

请注意我添加到您的 if 语句中的 photos.size() > 0select(..) statements in Jsoup will not return null if there are no elements. They will return an empty Elements list.你只需要检查photos的大小

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签