1

我无法访问 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();
    }

}
4

1 回答 1

3

我想他们QWebPage已经查询了所有QNetworkReply进来的对象。文档说

QNetworkReply 是一个顺序访问的 QIODevice,这意味着一旦从对象中读取数据,它就不再由设备保存。因此,如果需要,应用程序有责任保留这些数据。

所以重置它是行不通的。

请注意,如果您直接通过QNetworkAccessManager您发出网络请求,您确实会获得QNetworkReply可用的数据。您只能获得一个用于实际 URL 的方法,而该QWebPage方法会在此之后下载其他所有内容,即图像、js 等。

于 2010-06-03T18:40:28.313 回答