Вопрос

У меня проблемы с доступом к содержанию объектов QnetWorkReply. Контент кажется пустым или нулевым. Согласно документам (перевод с C ++ на Java), я думаю, что я правильно настроен, но безрезультатно. Кроме того, сообщается о «неизвестной ошибке».

Любые идеи очень ценится. Код:

public class Test extends QObject {

    private QWebPage page;

    public Test() {

        page = new QWebPage();

        QNetworkAccessManager nac = new QNetworkAccessManager();
        nac.finished.connect(this, "requestFinished(QNetworkReply)");

        page.setNetworkAccessManager(nac);

        page.loadProgress.connect(this, "loadProgress(int)");
        page.loadFinished.connect(this, "loadFinished()");

    }

    public void requestFinished(QNetworkReply reply) {

        reply.reset();
        reply.open(OpenModeFlag.ReadOnly);

        reply.readyRead.connect(this, "ready()");  // never gets called

        System.out.println("bytes: " + reply.url().toString());  // writes out asset uri no problem
        System.out.println("bytes: " + reply.bytesToWrite());  // 0
        System.out.println("At end: " + reply.atEnd());   // true
        System.out.println("Error: " + reply.errorString());   // "Unknown error"
    }

    public void loadProgress(int progress) {
        System.out.println("Loaded " + progress + "%");
    }

    public void loadFinished() {
        System.out.println("Done");
    }

    public void ready() {
        System.out.println("Ready");
    }

    public void open(String url) {
        page.mainFrame().load(new QUrl(url));
    }

    public static void main(String[] args) {

        QApplication.initialize(new String[] { });

        Test t = new Test();
        t.open("http://news.bbc.co.uk");

        QApplication.exec();
    }

}
Это было полезно?

Решение

Я полагаю, что QWebPage уже запросил все QNetworkReply Объекты, как они вошли. Документы говорят

QnetWorkReply-это последовательный доступ QioDevice, что означает, что после считывания данных из объекта он больше не хранится устройством. Поэтому приложение несет ответственность за сохранение этих данных, если это необходимо.

Так что сброс его не сработает.

Обратите внимание, что если вы делаете сетевой запрос непосредственно через QNetworkAccessManager Вы получаете QNetworkReply с доступными данными. Вы получаете только один для фактического URL -адреса, тогда как QWebPage Подходите к загрузке все остальное после этого IE Images, JS и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top