Android: ошибка CSS при использовании HTML Unit & Eclipse - PullRequest
5 голосов
/ 03 января 2012

Я использую Html Unit, чтобы перейти на веб-страницу, заполнить некоторые формы и нажать кнопку, чтобы перейти на следующую веб-страницу. Эта новая веб-страница (в моем коде она называется newPage) - это то, из чего я извлекаю источник html.

Этот метод отлично работает в Netbeans (хотя он выдает слишком много предупреждений)

import org.jsoup.Jsoup;

/* Regular (textview, button, etc) imports */

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;


        String username = "USERNAME", school = "SCHOOL", userpassword = "PASSWORD";
        HtmlElement loginName = null;
        HtmlElement password = null;
        //HtmlPage newPage;
        HtmlAnchor anchorByHref = null;
        try {
            WebClient webClient = new WebClient();
            final HtmlPage page = webClient
                    .getPage("https://cupertino.schoolloop.com/portal/login?d=x&return_url=1325402408153");
            loginName = page.getElementByName("login_name");
            password = page.getElementByName("password");
            loginName.setTextContent(username);
            loginName.setAttribute("value", username);
            password.setAttribute("value", userpassword);
            password.setTextContent(userpassword);
            anchorByHref = page
                    .getAnchorByHref("javascript:document.form.event_override.value='login';document.form.submit();");
            HtmlPage newPage = anchorByHref.click();

            webClient.waitForBackgroundJavaScript(10000);
            String html = newPage.getWebResponse().getContentAsString();


            message2.setText(html);
        } catch (Exception e) {
            e.printStackTrace();

        }


}

Однако в Eclipse, работающем под Android, написано

01-02 17:38:54.099: E/dalvikvm(23163): Could not find class 'org.w3c.dom.css.CSSCharsetRule', referenced from method com.gargoylesoftware.htmlunit.javascript.host.css.CSSCharsetRule.getCharsetRule

в logcat.

Кроме того, не устанавливает текст message2 в качестве HTML, который я хочу , хотя, когда я пытаюсь сделать это в Netbeans и печатать "html", он фактически печатает полный HTML-код страницы!

В итоге есть 2 проблемы. Eclipse не может успешно получить html и выдает ошибку, в которой говорится, что не удалось найти класс CSSCharsetRule. Я думаю, что импортировал соответствующий .jar для этого, но я не уверен, потому что в HTML-модуле содержится около 15 .jar, и я не могу импортировать их все, иначе у приложения возникнут проблемы с эмулятором и телефоном.

I have figured out that the error was due to not importing xml-apis-1.3.04.jar (which was imported in the Netbeans Project).

Однако теперь я сталкиваюсь с

"Преобразование в формат Dalvik завершилось ошибкой 1"

Error.

Возможно ли, что любая из проблем приведет к значению html, равному Null, и как я могу исправить ошибку преобразования Dalvik?

.jar Eclipse (слишком много делает приложение тяжелым, а включение xml-apis вызывает ошибку Dalvik)

Jar-файлы в Netbeans (работающие)

1 Ответ

1 голос
/ 05 января 2012

Я думаю, что у вас есть проблема с вашим classpath в затмении:

Could not find class 'org.w3c.dom.css.CSSCharsetRule'

У вас есть все банки, включенные в путь сборки?

Conversion to Dalvik Format Failed with Error 1

Это говорит мне, что один из ваших * .class не может быть конвертирован в * dex-файл

Возможно, у вас есть два jar-файла одного класса внутри:

Я решил проблему.

Кажется, у меня есть две банки на моем пути сборки, которые включают в себя пакет и классы.

«Сбой преобразования в формат Dalvik с ошибкой 1» на внешнем JAR

редактировать Чтобы найти дубликаты классов, извлеките все банки с помощью вашего любимого инструмента разархивирования и подождите, пока «этот файл уже существует».

...