我试图让我的Android应用程序连接到互联网,然后使用JSoup从亚马逊上删除一些HTML。唯一的问题是并非所有的亚马逊页面都是相同的,所以我需要创建几个if-else语句来检查我正在寻找的数据(例如标题,图像,价格等)可能的不同位置。 唯一的问题是,由于Android要求连接到互联网的所有代码都在try-catch语句中,不幸的副作用是某些if语句无法正常工作。如果我尝试将字符串设置为某个字符串并且它没有找到任何内容并将其自身设置为null,则它会立即从try-catch语句中退出,这意味着其余代码不会出现这种情况。跑。
有没有办法让if语句在没有catch语句停止程序的情况下运行? 我知道这非常令人困惑,因此代码如下,如果您有任何问题,我会尝试以最好的方式回答它们。 谢谢你的时间!
public class getProductAttributes extends AsyncTask<Void,Void,Void>{
String url;
String price;
String title;
String imageSRC;
ImageView productView;
int result;
public getProductAttributes(String url){
this.url = url;
}
protected Void doInBackground (Void... voids) {
try{
//Create JSoup connection
Document doc = Jsoup.connect(url).get();
//Checks the HTML code of Amazon for the title and image, the elements are nested HTML tags that lead me to the <img> tag that I need to retrieve my data.
Elements link= doc.select("ul.a-unordered-list.a-nostyle.a-horizontal.list.maintain-height")
.select("li.image.item.itemNo0.selected.maintain-height")
.select("span.a-list-item")
.select("span.a-declarative")
.select("div.imgTagWrapper");
//If an image is vertical (contains a-stretch-vertical,) this code works fine because it never checks a-stretch-horizontal. If the image contains a-stretch-horizontal however, the rest of the code isn't read and the else statement doesn't do its job
if(link.select("img.a-dynamic-image.a-stretch-vertical").equals(null)){
link = link.select("img.a-dynamic-image.a-stetch-horizontal");
}else{ link= link.select("img.a-dynamic-image.a-stretch-vertical");}
//Gets Title and Image Source information from the attributes inside <img>
title= link.attr("alt");
imageSRC= link.attr("data-old-hires");
}catch (Exception e){e.printStackTrace();}
答案 0 :(得分:2)
代码
[ForkJoinPool-3]
毫无意义。 select
会返回Elements
个集合,该集合永远不会是if(link.select("img.a-dynamic-image.a-stretch-vertical").equals(null)){
。如果您想检查.equals(null)
是否返回任何内容,请使用isEmpty
或查看返回集合的size
:
select
请注意,if(link.select("img.a-dynamic-image.a-stretch-vertical").isEmpty()){
// It's empty
的存在会对其中的代码产生 no 影响。它唯一改变的是该代码抛出的错误。