Pregunta

Tengo problemas para acceder al contenido de los objetos QNETWorkRently. El contenido parece estar vacío o cero. Según los documentos (que traduce de C ++ a Java), creo que tengo esto configurado correctamente, pero fue en vano. Además, se está informando un "error desconocido".

Cualquier idea muy apreciada. Código:

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

}
¿Fue útil?

Solución

Imagino que el QWebPage ya ha consultado todo el QNetworkReply objetos como entraban. Los documentos dicen

QNETWorkReply es un QioDeVice de acceso secuencial, lo que significa que una vez que los datos se leen del objeto, ya no los mantiene el dispositivo. Por lo tanto, es responsabilidad de la aplicación mantener estos datos si es necesario.

Por lo tanto, restablecer no va a funcionar.

Tenga en cuenta que si realiza la solicitud de red directamente a través de QNetworkAccessManager Obtienes un QNetworkReply con datos disponibles. Sin embargo, solo obtienes uno para la URL real, mientras que el QWebPage Enfoque descarga todo lo demás después de eso, es decir, js, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top