Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
#1

Возможен ли двойной парсинг в Activity или это неправильно? - Android

20.12.2013, 16:41. Просмотров 367. Ответов 5
Метки нет (Все метки)

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

Надеюсь понятно описал вопрос.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2013, 16:41     Возможен ли двойной парсинг в Activity или это неправильно?
Посмотрите здесь:

Android Новое Activity или ViewGroup
Fragments и Activity Android
Activity и многопоточность Android
Счетчик неправильно работает. Это займет в вас 12.5 секунд Android
Activity Android
Разметка activity Android
Android Два Activity
Android Выбор главного Activity через пользовательские настройки или геолокации
Android Кто может это переработать для андроида? И вообще это возможно?
Jsoup: парсинг странички и заполнение контентом Activity Android
Android Нужно ли пользоваться префиксами m и s для именования переменных или это устарело?
Фон activity или layout Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
21.12.2013, 11:35     Возможен ли двойной парсинг в Activity или это неправильно? #2
Цитата Сообщение от Kroshandowski Посмотреть сообщение
Как лучше все это сделать и можно ли вообще выполнять такие операции в одном Activity?
В одной активити такое сделать можно, какие могут быть проблемы ? Сначал парсшишь XML а потом HTML. Если эти операции выполняются долго - выносишь их в отдельный поток. Всё.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.12.2013, 13:06     Возможен ли двойной парсинг в Activity или это неправильно? #3
Цитата Сообщение от angryrobot Посмотреть сообщение
Если эти операции выполняются долго - выносишь их в отдельный поток
Обязательно в отдельный поток. Для парсинга страниц можно использовать JSoup
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.12.2013, 16:49  [ТС]     Возможен ли двойной парсинг в Activity или это неправильно? #4
angryrobot, а как-нибудь на примерах можете показать?
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
21.12.2013, 19:14     Возможен ли двойной парсинг в Activity или это неправильно? #5
Цитата Сообщение от Kroshandowski Посмотреть сообщение
а как-нибудь на примерах можете показать?
Что конкретно требуется показать ?
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
21.12.2013, 21:29  [ТС]     Возможен ли двойной парсинг в Activity или это неправильно? #6
angryrobot, вот код парсинга 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");

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

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


Нужно объединить с этим html парсером

Кликните здесь для просмотра всего текста

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


Просто нужно результат html парсера вывести там,где я написал "Здесь нужно спарсить и вставить картинку с HTML страницы".
Т.к. в xml файле нет картинок,понадобилось парсить через html. Оба парсера я использовал отдельно от друг друга,но в этот раз их нужно объединить. Никогда не сталкивался с одновременным использованием сразу двух.

Заранее спасибо.
Yandex
Объявления
21.12.2013, 21:29     Возможен ли двойной парсинг в Activity или это неправильно?
Ответ Создать тему
Опции темы

Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru