Java HTML解析JSoup img不';行不通 新LOGCAT LogCat错误消息
此部分用于在img的Java HTML解析JSoup img不';行不通 新LOGCAT LogCat错误消息,java,android,html,Java,Android,Html,此部分用于在img的ArrayList中插入Bitmap URL解析为: Mainactivity.java 公共类MainActivity扩展活动{ ListView lista; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lista=(ListView)this.findviewbyd(R.id.
ArrayList
中插入Bitmap
URL解析为:
Mainactivity.java
公共类MainActivity扩展活动{
ListView lista;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lista=(ListView)this.findviewbyd(R.id.main_lista);//列表id
//异步任务
ParsingPaginaWeb解析=新建ParsingPaginaWeb();
解析。执行(“”);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
私有类ParsingPaginaWeb扩展异步任务{
ArrayList titoli;//列表标题
ArrayList descripioni;//列表描述
ArrayList日期;//列表日期
ArrayList类别;//列表类别
ArrayList immaginiart;//lista img
@凌驾
受保护的void onPreExecute()
{
titoli=新的ArrayList();
descripioni=newarraylist();
日期=新的ArrayList();
category=newarraylist();
immaginiart=新数组列表();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
位图;
试一试{
Document doc=Jsoup.connect(“http://www.santeramolive.it/news/tutte-le-news.aspx")
.userAgent(“Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.22(KHTML,如Gecko)Chrome/25.0.1364.172 Safari/537.22”)
.timeout(30000.get();
元素listarticoli=doc.getElementsByClass(“列出文章”).first();
Elements articoli=listarticoli.getElementsByClass(“艺术列表”);
用于(元素Artiolo:Artioli)
{
//头衔
字符串titolo=articolo.getElementsByClass(“t-art-list”).first().text();
//描述
String descripione=articolo.getElementsByTag(“p”).first().text();
//在arraylist中插入
添加(titolo);
说明i.添加(说明e);
Elements dcs=articolo.getElementsByClass(“日期标签艺术列表”);
用于(元件dc:dcs)
{
字符串数据=dc.getElementsByClass(“日期艺术列表”).first().text();
字符串categoria=dc.getElementsByClass(“标记艺术列表”).first().text();
date.add(数据);//add date
categorie.add(categoria);//添加类别
}
//img部件
元素imgdivs=articolo.getElementsByClass(“f-art-list”);
用于(元素imgsdiv:imgdivs)
{
Element divimg=imgsdiv.getElementsByClass(“惰性img响应”).first();
字符串imgSrc=divimg.attr(“src”);
InputStream input=new java.net.URL(imgSrc.openStream();
位图=BitmapFactory.decodeStream(输入);
immaginiart.add(位图);
}
}
}捕获(例外e){
Log.e(“ESEMPIO”、“ERRORE-NEL解析”);
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
ParsingarayAdapter=新的ParsingarayAdapter(main activity.this,titoli,descripioni,date,categorie,immaginiart);
setAdapter(适配器);
}
}
}
parsingarayadapter.java
公共类ParsingArrayAdapter扩展ArrayAdapter{
//静态等风险和agli id
私有最终静态int-LAYOUT=R.LAYOUT.riga_listview;
私有最终静态int TITOLO=R.id.riga_listview_TITOLO;
私有最终静态int descripione=R.id.riga_listview_descripione;
私有最终静态int DATA=R.id.riga_listview_DATA;
私有最终静态int CATEGORIA=R.id.riga_listview_CATEGORIA;
私有最终静态int-IMMAGINE=R.id.riga\u listview\u-IMMAGINE;
ArrayList titoli;
ArrayList Descriptioni;
ArrayList日期;
ArrayList分类;
ArrayList Inmaginiart;
上下文c;//上下文
布局充气机;//布局充气机
公共ParsingArrayAdapter(上下文上下文、ArrayList标题、ArrayList描述、ArrayList日期、ArrayList分类、ArrayList immaginiart)
{
超级(上下文,TITOLO);
c=上下文;
this.titoli=titoli;
this.descripioni=descripioni;
这个日期=日期;
this.categorie=categorie;
这个。immaginiart=immaginiart;
此充气器=来自(c)的充气器;
}
@凌驾
public int getCount()
{
返回titoli.size();
}
@凌驾
公共视图getView(int pos、视图视图、视图组父视图)
{
CacheRiga cache;//cache
如果(视图==null)
{
//在quanto devo ancora modificare中查看非附件alla lista
//我是testi delle textview
视图=充气机。充气(布局、父级、假);
cache=新CacheRiga();
cache.titolo=(TextView)view.findViewById(titolo);
cache.descripione=(TextView)view.findViewById(descripione);//collego descripione
cache.data=(TextView)view.findViewById(数据);
cache.categoria=(TextView)view.findViewById(categoria);
cache.immagineart=(ImageView)view.findViewById(IMMAGINE);
view.setTag(缓存);
}
其他的
{
cache=(CacheRiga)视图。getTag();dalla视图
}
cache.titolo.setText(titoli.get(pos));
cache.descripione.setText(descripioni.get(pos));
cache.data.setText(date.get(pos));
cache.categoria.setText(categorie.get(pos));
cache.immagineart.setImageBitmap(immaginiart.get(pos));
返回视图;
}
私有类CacheRiga{
公共文本视图标题;
公共文本视图描述;
公共文本视图数据;
公共文本视图分类;
公众形象观;
}
}
您的问题出在
String imgSrc = divimg.attr("src");
因为离婚==
<figure class="f-art-list">
<a href="/news/Cronaca/295507/news.aspx" id="MainContent_ListNews_rptNews_lnkToNews1_0" title="Ai domiciliari dopo atti incendiari nei confronti di imprenditore di Noci. Arrestati due santermani">
<img style="display: block;" data-original="http://cdn.livenetwork.it/news/295507/634903800413300428_arresto_carabinieri_HomeStandard_191x95.jpg" src="http://cdn.livenetwork.it/news/295507/634903800413300428_arresto_carabinieri_HomeStandard_191x95.jpg" class="lazy img-responsive" alt="Ai domiciliari dopo atti incendiari nei confronti di imprenditore di Noci. Arrestati due santermani" title="Ai domiciliari dopo atti incendiari nei confronti di imprenditore di Noci. Arrestati due santermani">
</a>
</figure>
cache.immagineart.setImageBitmap(immaginiart.get(pos));
06-20 12:30:17.097: E/AndroidRuntime(15941): FATAL EXCEPTION: main
06-20 12:30:17.097: E/AndroidRuntime(15941): Process: it.rs.esempioparsinglistview, PID: 15941
06-20 12:30:17.097: E/AndroidRuntime(15941): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
06-20 12:30:17.097: E/AndroidRuntime(15941): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
06-20 12:30:17.097: E/AndroidRuntime(15941): at java.util.ArrayList.get(ArrayList.java:308)
06-20 12:30:17.097: E/AndroidRuntime(15941): at it.rs.esempioparsinglistview.ParsingArrayAdapter.getView(ParsingArrayAdapter.java:78)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.AbsListView.obtainView(AbsListView.java:2295)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.ListView.onMeasure(ListView.java:1175)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.View.measure(View.java:16521)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1231)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.View.measure(View.java:16521)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.View.measure(View.java:16521)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
06-20 12:30:17.097: E/AndroidRuntime(15941): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.View.measure(View.java:16521)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
06-20 12:30:17.097: E/AndroidRuntime(15941): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2553)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.View.measure(View.java:16521)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.Choreographer.doFrame(Choreographer.java:544)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.os.Handler.handleCallback(Handler.java:733)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.os.Handler.dispatchMessage(Handler.java:95)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.os.Looper.loop(Looper.java:136)
06-20 12:30:17.097: E/AndroidRuntime(15941): at android.app.ActivityThread.main(ActivityThread.java:5142)
06-20 12:30:17.097: E/AndroidRuntime(15941): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 12:30:17.097: E/AndroidRuntime(15941): at java.lang.reflect.Method.invoke(Method.java:515)
06-20 12:30:17.097: E/AndroidRuntime(15941): at dalvik.system.NativeStart.main(Native Method)
ParsingArrayAdapter.java:78 is this: cache.immagineart.setImageBitmap(immaginiart.get(pos));
public class MainActivity extends Activity {
ListView lista;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lista = (ListView)this.findViewById(R.id.main_lista);//list id
//asynctask
ParsingPaginaWeb parsing = new ParsingPaginaWeb();
parsing.execute("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class ParsingPaginaWeb extends AsyncTask<String,String,String> {
ArrayList<String> titoli; //list title
ArrayList<String> descrizioni; //list description
ArrayList<String> date; // list date
ArrayList<String> categorie; // list category
ArrayList<Bitmap> immaginiart; // lista img
@Override
protected void onPreExecute()
{
titoli = new ArrayList<String>();
descrizioni = new ArrayList<String>();
date= new ArrayList<String>();
categorie= new ArrayList<String>();
immaginiart = new ArrayList<Bitmap>();
}
@Override
protected String doInBackground(String... params) {
Bitmap bitmap;
try {
Document doc = Jsoup.connect("http://www.santeramolive.it/news/tutte-le-news.aspx")
.userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
.timeout(30000).get();
Element listarticoli = doc.getElementsByClass("list-articles").first();
Elements articoli = listarticoli.getElementsByClass("art-list");
for(Element articolo : articoli)
{
// title
String titolo = articolo.getElementsByClass("t-art-list").first().text();
// description
String descrizione = articolo.getElementsByTag("p").first().text();
// insert in arraylist
titoli.add(titolo);
descrizioni.add(descrizione);
Elements dcs = articolo.getElementsByClass("date-tag-art-list");
for(Element dc : dcs)
{
String data = dc.getElementsByClass("date-art-list").first().text();
String categoria = dc.getElementsByClass("tag-art-list").first().text();
date.add(data); // add date
categorie.add(categoria);// add category
}
//img part
Elements imgdivs = articolo.getElementsByClass("f-art-list");
for(Element imgsdiv : imgdivs)
{
Element divimg = imgsdiv.getElementsByClass("lazy img-responsive").first();
String imgSrc = divimg.attr("src");
InputStream input = new java.net.URL(imgSrc).openStream();
bitmap = BitmapFactory.decodeStream(input);
immaginiart.add(bitmap);
}
}
} catch (Exception e) {
Log.e("ESEMPIO", "ERRORE NEL PARSING");
}
return null;
}
@Override
protected void onPostExecute(String result)
{
ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli, descrizioni, date, categorie, immaginiart);
lista.setAdapter(adapter);
}
}
}
public class ParsingArrayAdapter extends ArrayAdapter<String>{
//riferimenti statici alle risorse e agli id
private final static int LAYOUT = R.layout.riga_listview;
private final static int TITOLO = R.id.riga_listview_titolo;
private final static int DESCRIZIONE = R.id.riga_listview_descrizione;
private final static int DATA = R.id.riga_listview_data;
private final static int CATEGORIA = R.id.riga_listview_categoria;
private final static int IMMAGINE= R.id.riga_listview_immagine;
ArrayList<String> titoli;
ArrayList<String> descrizioni;
ArrayList<String> date;
ArrayList<String> categorie;
ArrayList<Bitmap> immaginiart;
Context c; //context
LayoutInflater inflater; //layout inflater
public ParsingArrayAdapter(Context context,ArrayList<String> titoli,ArrayList<String> descrizioni, ArrayList<String> date, ArrayList<String> categorie, ArrayList<Bitmap> immaginiart)
{
super(context,TITOLO);
this.c = context;
this.titoli = titoli;
this.descrizioni = descrizioni;
this.date= date;
this.categorie= categorie;
this.immaginiart= immaginiart;
this.inflater = LayoutInflater.from(c);
}
@Override
public int getCount()
{
return titoli.size();
}
@Override
public View getView(int pos,View view,ViewGroup parent)
{
CacheRiga cache; //cache
if(view==null)
{
// creo la view ma non l'attacco alla lista in quanto devo ancora modificare
// i testi delle textview
view = inflater.inflate(LAYOUT, parent,false);
cache = new CacheRiga();
cache.titolo = (TextView) view.findViewById(TITOLO);
cache.descrizione = (TextView) view.findViewById(DESCRIZIONE);//collego descrizione
cache.data = (TextView) view.findViewById(DATA);
cache.categoria = (TextView) view.findViewById(CATEGORIA);
cache.immagineart = (ImageView) view.findViewById(IMMAGINE);
view.setTag(cache);
}
else
{
cache = (CacheRiga) view.getTag(); dalla view
}
cache.titolo.setText(titoli.get(pos));
cache.descrizione.setText(descrizioni.get(pos));
cache.data.setText(date.get(pos));
cache.categoria.setText(categorie.get(pos));
cache.immagineart.setImageBitmap(immaginiart.get(pos));
return view;
}
private class CacheRiga {
public TextView titolo;
public TextView descrizione;
public TextView data;
public TextView categoria;
public ImageView immagineart;
}
}
String imgSrc = divimg.attr("src");
Element divimg = imgsdiv.getElementsByClass("lazy img-responsive").first();
if ( divimg==null)
{
Log.e(TAG, "divimg==null: " + titolo);
immaginiart.add(null);
}
else
{
String imgSrc = divimg.attr("src");
InputStream input = new java.net.URL(imgSrc).openStream();
bitmap = BitmapFactory.decodeStream(input);
immaginiart.add(bitmap);
}