解析jsoup名单 [英] Parsing jsoup list

查看:131
本文介绍了解析jsoup名单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了我解析一个网页列表。我可以显示标题和第一篇文章的第一形象,但我想要的是每篇文章显示图像。这是code:

EDITED code

 公共类MainActivity延伸活动{
    ProgressDialog mProgressDialog;
    公共静态最后弦乐TAG_TITOLI =titoli;
    私有静态最后弦乐TAG_IMMAGINE =想象,;
    ListView的LISTA;
    位图位图;
    公共ImageView的想象,;
    公共ImageView的logoimg;    静态最后弦乐BLOG_URL =htt​​p://www.multiplayer.it;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        LISTA =(ListView控件)this.findViewById(R.id.main_lista); // recupero LISTA达ID        //查看inflatedView = getLayoutInflater()膨胀(R.layout.riga_listview,NULL);
        // immaginebtn =(按钮)findViewById(R.id.immaginebtn);
        //克里奥编eseguo L'的AsyncTask
        ParsingPaginaWeb解析=新ParsingPaginaWeb();
        parsing.execute();        //想象,BTN
        /*immaginebtn.setOnClickListener(new OnClickListener(){
            公共无效的onClick(查看为arg0){
                //执行标志的AsyncTask
                新徽标()的execute()。
            }
        }); * /
        //新标志()的execute()。         //在选择单列表项启动新画面
            lista.setOnItemClickListener(新OnItemClickListener(){                @覆盖
                公共无效onItemClick(适配器视图<>母公司,观景,
                        INT位置,长的id){
                    //从选定的ListItem得到的值
                    字符串titoli =((的TextView)view.findViewById(R.id.riga_listview_titolo))的getText()的toString()。
                    想象,=((ImageView的)view.findViewById(R.id.imageView1));                    //开始新意图
                    在意向=新意图(getApplicationContext(),SingleActivity.class);
                    in.putExtra(TAG_TITOLI,titoli);
                    in.putExtra(TAG_IMMAGINE,位图);
                    //in.putExtra(TAG_CONTENT,续)
                    startActivity(在);                }
            });    }    私有类ParsingPaginaWeb扩展的AsyncTask<字符串,字符串,字符串> {        ArrayList的<串GT; titoli; // LISTA代titoli
        ArrayList的<&位图GT;位图=新的ArrayList<&位图GT;();
        // ArrayList的<串GT;内容; // LISTA阿尔descrizioni        @覆盖
        在preExecute保护无效()
        {
            //初步迪eseguire IL解析inizializzo GLI的ArrayList
            mProgressDialog =新ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle(Multiplayer.it);
            mProgressDialog.setMessage(Caricamento articoli ......);
            mProgressDialog.setIndeterminate(假);
            mProgressDialog.show();            titoli =新的ArrayList<串GT;();
            位图=新的ArrayList<&位图GT;();
            //内容=新的ArrayList<串GT;();
        }        @覆盖
        保护字符串doInBackground(字符串... PARAMS){
            尝试{                文档的DOC = Jsoup.connect(BLOG_URL)获得();
                元件nodeBlogStats = doc.select(div.news-COL-0 H3); //每multiplayer.it元素nodeBlogStats = doc.select(div.news-COL-0 H3);每FTV #comunePartINI>选项
                对于(元sezione:nodeBlogStats)
                {
                    titoli.add(sezione.text());                }
            }赶上(例外五){
                //在CASO迪errore
                Log.e(ESEMPIO,ERRORE NEL PARSING);
            }
            返回null;
        }        @覆盖
        保护无效onPostExecute(字符串结果)
        {
            // DOPO车豪eseguito金正日解析mostro我达提内拉列表视图
            //山岛金正日自定义数组adpater ParsingArrayAdapter
            ParsingArrayAdapter适配器=新ParsingArrayAdapter(MainActivity.this,titoli,位图);
            lista.setAdapter(适配器);
            mProgressDialog.dismiss();
            新徽标()的execute()。
        }
    }    // CLASSE每caricamento immagini ..    //标志的AsyncTask    私有类标志扩展的AsyncTask<太虚,太虚,太虚> {
        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            mProgressDialog =新ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle(Immagini);
            mProgressDialog.setMessage(载入图片...);
            mProgressDialog.setIndeterminate(假);
            mProgressDialog.show();
        }        @覆盖
        保护无效doInBackground(虚空...... PARAMS){            尝试{
                //连接到网站
                文献文件= Jsoup.connect(BLOG_URL)获得();
                //使用元素来获取类数据
                //元素IMG = document.select(div.news-COL-0 IMG [SRC]);
                //找到src属性
                对于(IMG元素:document.select(div.news-COL-0 IMG [来源])){
                    串ImgSrc = img.attr(SRC);
                从网址下载//形象
                输入的InputStream =新的java.net.URL(ImgSrc).openStream();
                //德code位图
                位= BitmapFactory.de codeStream(输入);
                }
            }赶上(IOException异常五){
                e.printStackTrace();
            }
            返回null;
        }        @覆盖
        保护无效onPostExecute(虚空结果){
            //设置图像下载到的ImageView
            logoimg =(ImageView的)findViewById(R.id.imageView1);
            logoimg.setImageBitmap(位图);
            mProgressDialog.dismiss();           // ParsingArrayAdapter适配器=新ParsingArrayAdapter(MainActivity.this,titoli);
           // lista.setAdapter(适配器);
        }
    }}

如何解决?

编辑:
适配器类:

 公共类ParsingArrayAdapter扩展ArrayAdapter<串GT; {    // ID和资源引用
    私人最终静态INT LAYOUT = R.layout.riga_listview;
    私人最终静态INT TITOLO = R.id.riga_listview_titolo;
    私人最终静态INT IMMAGINE = R.id.imageView1;    ArrayList的<&位图GT;位图;    ArrayList的<串GT; titoli; // LISTA代titoli    上下文℃; //背景
    LayoutInflater吹气; //布局气筒    公共ParsingArrayAdapter(上下文的背景下,ArrayList的<串GT; titoli,ArrayList的<&位图GT;位图)
    {
        超(背景下,TITOLO);
        this.c =背景;
        this.titoli = titoli;
        this.bitmap =位图;
        this.inflater = LayoutInflater.from(C);
    }    @覆盖
    公众诠释getCount将()
    {
        返回titoli.size(); //列表lenght
    }    @燮pressLint(NewApi)
    @覆盖
    公共查看getView(INT POS,查看视图的ViewGroup以及母公司)
    {
        CacheRiga缓存; //缓存
        如果(查看== NULL)
        {            鉴于= inflater.inflate(LAYOUT,父母,假);
            缓存=新CacheRiga(); // inizializzo拉高速缓存
            cache.titolo =(TextView中)view.findViewById(TITOLO); //标题            cache.immagini =(ImageView的)view.findViewById(IMMAGINE); // collego descrizione
            view.setTag(缓存);
        }
        其他
        {
            缓存=(CacheRiga)view.getTag();
        }        cache.titolo.setText(titoli.get(POS)); //我设置了标题        //cache.immagini.setImageBitmap(bitmap.get(pos));        返回视图。
    }    私有类CacheRiga {// Cache类
        公众的TextView TITOLO; //标题缓存
        公共ImageView的immagini; //图像缓存
    }}


解决方案

首先,你可能只当你写一个程序使用英语的考虑。这尤其包括命名的意见和变量,类,函数等。你永远不知道最终的人谁不说你的语言有读你的code(例如,当您将它张贴在SO)。其次重要的是,我为你指的是在你的code哪一部分不确定;有在HTML被解析两种不同的方法。结果
无论如何,我想你指的是 doInBackground()从类标志。你基本上已经实现正是你要寻找的 ParsingPaginaWeb 类。你循环每个找到< IMG> ,并获取相应的图像:

 为(IMG元素:document.select(div.news-COL-0 IMG [来源])){
    字符串SRC = img.attr(SRC);
    InputStream为=新的java.net.URL(SRC).openStream();
    位图位图= BitmapFactory.de codeStream(是);
    / *保存位图或通过别的地方,
       否则,将简单地被覆盖* /
}

您很可能将不得不改变在其中存储位图数据类型,因为你检索多个。你可以使用列表与LT;位图方式> 将它们存储例如:

I created a list in which i parse a webpage. I can display the titles and the first image of the first article but what i want is display the image for each article. This is the code:

EDITED CODE

public class MainActivity extends Activity{
    ProgressDialog mProgressDialog;
    public static final String TAG_TITOLI = "titoli";
    private static final String TAG_IMMAGINE = "immagine";
    ListView lista;
    Bitmap bitmap;
    public ImageView immagine;
    public ImageView logoimg;

    static final String BLOG_URL = "http://www.multiplayer.it";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lista = (ListView)this.findViewById(R.id.main_lista);//recupero lista da id



        //View inflatedView = getLayoutInflater().inflate(R.layout.riga_listview, null);
        //immaginebtn = (Button)findViewById(R.id.immaginebtn);
        //creo ed eseguo l'asynctask
        ParsingPaginaWeb parsing = new ParsingPaginaWeb();
        parsing.execute("");

        // Immagine btn
        /*immaginebtn.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                // Execute Logo AsyncTask
                new Logo().execute();
            }
        });*/
        //new Logo().execute();

         // Launching new screen on Selecting Single ListItem
            lista.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // getting values from selected ListItem
                    String titoli = ((TextView) view.findViewById(R.id.riga_listview_titolo)).getText().toString();
                    immagine = ((ImageView) view.findViewById(R.id.imageView1));

                    // Starting new intent
                    Intent in = new Intent(getApplicationContext(), SingleActivity.class);
                    in.putExtra(TAG_TITOLI, titoli);
                    in.putExtra(TAG_IMMAGINE, bitmap);
                    //in.putExtra(TAG_CONTENT, cont);
                    startActivity(in);

                }
            });

    }

    private class ParsingPaginaWeb extends AsyncTask<String,String,String> {

        ArrayList<String> titoli; //lista dei titoli
        ArrayList<Bitmap> bitmap = new ArrayList<Bitmap>(); 
        //ArrayList<String> content; //lista delle descrizioni

        @Override
        protected void onPreExecute()
        {   
            //prima di eseguire il parsing inizializzo gli arraylist
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Multiplayer.it");
            mProgressDialog.setMessage("Caricamento articoli...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();

            titoli = new ArrayList<String>();
            bitmap = new ArrayList<Bitmap>(); 
            //content = new ArrayList<String>();
        }

        @Override
        protected String doInBackground(String... params) {
            try {

                Document doc = Jsoup.connect(BLOG_URL).get();
                Elements nodeBlogStats = doc.select("div.news-col-0 h3"); //per multiplayer.it Elements nodeBlogStats = doc.select("div.news-col-0 h3"); per ftv #comunePartINI > option
                for(Element sezione : nodeBlogStats)
                {
                    titoli.add(sezione.text());

                }
            } catch (Exception e) {
                // In caso di errore
                Log.e("ESEMPIO", "ERRORE NEL PARSING");
            }
            return null;
        }



        @Override
        protected void onPostExecute(String result)
        {
            // dopo che ho eseguito il parsing mostro i dati nella listview
            // usando il custom array adpater ParsingArrayAdapter
            ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli, bitmap);
            lista.setAdapter(adapter);
            mProgressDialog.dismiss();
            new Logo().execute();
        }


    }

    // Classe per caricamento immagini..

    // Logo AsyncTask

    private class Logo extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Immagini");
            mProgressDialog.setMessage("Loading images...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {

            try {
                // Connect to the web site
                Document document = Jsoup.connect(BLOG_URL).get();
                // Using Elements to get the class data 
                //Elements img = document.select("div.news-col-0 img[src]");
                // Locate the src attribute
                for(Element img : document.select("div.news-col-0 img[src]")) {
                    String ImgSrc = img.attr("src");
                // Download image from URL
                InputStream input = new java.net.URL(ImgSrc).openStream();
                // Decode Bitmap
                bitmap = BitmapFactory.decodeStream(input);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Set downloaded image into ImageView
            logoimg = (ImageView) findViewById(R.id.imageView1);
            logoimg.setImageBitmap(bitmap);
            mProgressDialog.dismiss();

           // ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli);
           // lista.setAdapter(adapter);
        }
    }

}

How can i solve?

EDIT: Adapter class:

public class ParsingArrayAdapter extends ArrayAdapter<String>{

    //ID and resources references
    private final static int LAYOUT = R.layout.riga_listview;
    private final static int TITOLO = R.id.riga_listview_titolo;
    private final static int IMMAGINE = R.id.imageView1;

    ArrayList<Bitmap> bitmap ; 

    ArrayList<String> titoli; //lista dei titoli

    Context c; //context
    LayoutInflater inflater; //layout inflater

    public ParsingArrayAdapter(Context context,ArrayList<String> titoli, ArrayList<Bitmap> bitmap)
    {
        super(context,TITOLO);
        this.c = context;
        this.titoli = titoli;
        this.bitmap = bitmap;
        this.inflater = LayoutInflater.from(c);
    }

    @Override
    public int getCount()
    {
        return titoli.size(); //List lenght 
    }

    @SuppressLint("NewApi")
    @Override
    public View getView(int pos,View view,ViewGroup parent)
    {
        CacheRiga cache; //cache
        if(view==null)
        {

            view = inflater.inflate(LAYOUT, parent,false); 
            cache = new CacheRiga(); //inizializzo la cache
            cache.titolo = (TextView) view.findViewById(TITOLO); //title

            cache.immagini = (ImageView) view.findViewById(IMMAGINE);//collego descrizione


            view.setTag(cache);
        }
        else
        {
            cache = (CacheRiga) view.getTag(); 
        }

        cache.titolo.setText(titoli.get(pos)); //I set up the title

        //cache.immagini.setImageBitmap(bitmap.get(pos));



        return view;
    }

    private class CacheRiga { // Cache class
        public TextView titolo; // Title cache
        public ImageView immagini; // Image cache
    }

}

解决方案

First of all, you might consider only using English when you write a program. This especially includes naming comments and variables, classes, functions etc. You never know if eventually someone who doesn't speak your language has to read your code (e.g. when you post it on SO). Second of all, I'm unsure as to what part in your code you're refering to; there are two different methods in which HTML is being parsed.
Anyway, I assume you're refering to doInBackground() from class Logo. You basically already achieved exactly what you're looking for in the ParsingPaginaWeb class. You loop over each found <img> and fetch the respective image:

for(Element img : document.select("div.news-col-0 img[src]")) {
    String src = img.attr("src");
    InputStream is = new java.net.URL(src).openStream();
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    /* save the bitmap or pass it somewhere else,
       otherwise, it will simply be overwritten */
}

You are probably going to have to change the data types in which you store the bitmaps, since you're retrieving more than one. You could use a List<Bitmap> to store them for example.

这篇关于解析jsoup名单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆