Возможен ли двойной парсинг в Activity?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Kroshandowski
Сообщения: 9
Зарегистрирован: 10 дек 2013, 20:21
Контактная информация:

Возможен ли двойной парсинг в Activity?

Сообщение Kroshandowski » 20 дек 2013, 23:47

У меня есть MainActivity и в нем парсится XML c выводом результата в TextView.Все работает хорошо. Но помимо результатов с XML,мне нужно еще спарсить картинку с HTML страницы. Так вот вопрос! Как лучше организовать передачу результатов HTML парсинга картинки на эту же MainActivity?
Как лучше все это сделать и можно ли вообще выполнять такие операции в одном Activity?Или же лучше парсинг картинки вынести в отдельный Activity,а из него передавать результат в MainActivity.

Вот код MainActivity (парсит xml):

Код: Выделить всё

public class MainActivity extends Activity {
    TextView textview;
    NodeList nodelist;
    ProgressDialog pDialog;
    String url;
    String DetailText;
    String URL = "Тут адрес xml";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textview = (TextView) findViewById(R.id.text);
        new DownloadXML().execute(URL);
       }

    private class DownloadXML extends AsyncTask<String, Void, Void> {

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

        @Override
        protected Void doInBackground(String... Url) {
            try {
                URL url = new URL(Url[0]);
                DocumentBuilderFactory dbf = DocumentBuilderFactory
                        .newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new InputSource(url.openStream()));
                doc.getDocumentElement().normalize();
                nodelist = doc.getElementsByTagName("point");

            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;

        }

        @Override
        protected void onPostExecute(Void args) {

            for (int temp = 0; temp < nodelist.getLength(); temp++) {
                Node nNode = nodelist.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                   textview.setText(textview.getText() + getNode("point", eElement) + "\n" + "\n");
                   textview.setText(textview.getText() + getNode("name", eElement) + "\n" + "\n");
                   textview.setText(textview.getText() + getNode("id", eElement) + "\n" + "\n");

                  [b]Здесь нужно спарсить и вставить картинку с HTML страницы[/b]

                 }
            }
            pDialog.dismiss();
        }
    }

   
    private static String getNode(String sTag, Element eElement) {
        NodeList nlList = eElement.getElementsByTagName(sTag).item(0)
                .getChildNodes();
        Node nValue = (Node) nlList.item(0);
        return nValue.getNodeValue();
    }
Надеюсь понятно описал вопрос.
Заранее спасибо.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Возможен ли двойной парсинг в Activity?

Сообщение rezak90 » 21 дек 2013, 00:30

Здесь нужно спарсить и вставить картинку с HTML страницы
здесь запускаешь новый асинктаск в котором парсишь html
R.id.team
Политика на форуме запрещена

Kroshandowski
Сообщения: 9
Зарегистрирован: 10 дек 2013, 20:21
Контактная информация:

Re: Возможен ли двойной парсинг в Activity?

Сообщение Kroshandowski » 21 дек 2013, 02:50

rezak90 писал(а):Здесь нужно спарсить и вставить картинку с HTML страницы
здесь запускаешь новый асинктаск в котором парсишь html
Спасибо что откликнулись...помогите пожалуйста.
Есть готовый парсер htmlcleaner...как его правильно интегрировать с кодом выше?

Код: Выделить всё

package pete.android.study;
import java.net.URL;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class HtmlCleanerStudyActivity extends Activity {
 
    // HTML page
    static final String BLOG_URL = "http://xjaphx.wordpress.com/";
    // XPath query
    static final String XPATH_STATS = "//div[@id='blog-stats']/ul/li";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // init view layout
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // decide output
        String value = "";
        try {
            value = getBlogStats();
            ((TextView)findViewById(R.id.tv)).setText(value);
        } catch(Exception ex) {
            ((TextView)findViewById(R.id.tv)).setText("Error");
        }
    }
 
    /*
     * get blog statistics
     */
    public String getBlogStats() throws Exception {
        String stats = "";
 
        // config cleaner properties
        HtmlCleaner htmlCleaner = new HtmlCleaner();
        CleanerProperties props = htmlCleaner.getProperties();
        props.setAllowHtmlInsideAttributes(false);
        props.setAllowMultiWordAttributes(true);
        props.setRecognizeUnicodeChars(true);
        props.setOmitComments(true);
 
        // create URL object
        URL url = new URL(BLOG_URL);
        // get HTML page root node
        TagNode root = htmlCleaner.clean(url);
 
        // query XPath
        Object[] statsNode = root.evaluateXPath(XPATH_STATS);
        // process data if found any node
        if(statsNode.length > 0) {
            // I already know there's only one node, so pick index at 0.
            TagNode resultNode = (TagNode)statsNode[0];
            // get text data from HTML node
            stats = resultNode.getText().toString();
        }
 
        // return value
        return stats;
    }
}

Ответить