Jsoup 解析仅输出 null

Jsoup parsing just output null

提问人:laguro 提问时间:9/24/2023 最后编辑:laguro 更新时间:9/26/2023 访问量:72

问:

我制作了一个应用程序来从我的奥林巴斯相机获取原始文件。 我可以通过 wifi 连接到它并转到 192.168.0.10 或 oishare/DCIM/100OLYMP 以获取图片列表,但是当我点击其中一些时,我只能获得预览,所以我只需要将 oishare/DCIM/100OLYMP/FILE.html?/DCIM/100OLYMP/ 替换为 oishare/DCIM/100OLYMP/ 即可下载原始文件。因此,应用程序只需替换此页面上的所有链接并将其显示在屏幕上即可。 听起来很简单。

所以我连接了 JSOUP:

实现'org.jsoup:jsoup:1.16.1' 并从官方网站下载此版本

接下来,我创建了一个 HtmlParser Java 类:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class HTMLParser {
    public String getHTML(String url) {
        try {
            Document doc = Jsoup.connect("oishare/DCIM/100OLYMP").get();
            return doc.html();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }
}

然后在主要活动中,我添加

package com.oly.rawshare;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class MainActivity extends AppCompatActivity {

    private WebView webView;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        HTMLParser parser = new HTMLParser();
        String htmlCode = parser.getHTML("oishare/DCIM/100OLYMP");

        if (htmlCode != null) {
            htmlCode = htmlCode.replace("<img src=\"100OLYMP_files/title.gif\" width=\"300px\" height=\"27px\" alt=\"TITLE\">\n<hr color=\"#2E2E2E\">\n<div style=\"position: relative;\">\n<div style=\"background-color: #2E2E2E; padding: 10px; margin-bottom: 10px; border: 1px solid #2E2E2E;\">\n<div align=\"left\">\n<font color=\"#929292\">&gt;</font><a href=\"oishare/DCIM\"><font color=\"#929292\">DCIM</font></a><font color=\"#929292\">&gt;</font>\n<script type=\"text/javascript\">\nvar path = location.pathname;\nvar dcf = path.split(\"/\");\ndocument.write('<font color=\"#929292\">'+dcf[2]+'</font>');\n</script><font color=\"#929292\">100OLYMP</font>\n\n<br>\n</div>\n</div>\n</div>\n", "");
            htmlCode = htmlCode.replace("oishare/DCIM/100OLYMP/FILE.html?/DCIM/100OLYMP/", "oishare/DCIM/100OLYMP/");
        }
        webView = findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
        webView.loadDataWithBaseURL(null, htmlCode, "text/html", "en_US", null);
    }
}

但是由于未知原因,我只是在输出字符串:(中得到 null

是的。。。idk有什么问题,我无法解决它..

java android 解析 jsoup

评论

3赞 Sören 9/24/2023
好吧,您的异常处理程序中有一个,所以这将是我的第一个猜测。return null
0赞 laguro 9/24/2023
是的,但这意味着 ' 文档文档 = Jsoup.connect(“oishare/DCIM/100OLYMP”).get();返回 doc.html();'不起作用
5赞 Sören 9/24/2023
是的,就是这个意思。甚至还有一个会告诉你哪里出了问题。e.printStackTrace();
2赞 Pshemo 9/24/2023
您的方法具有未使用的参数。而不是你可能想要public String getHTML(String url)urlDocument doc = Jsoup.connect("oishare/DCIM/100OLYMP").get();Document doc = Jsoup.connect(url).get();
0赞 laguro 9/24/2023
Pshemo,是的,就是这样,但不起作用,所以我决定将其更改为我的网址

答:

1赞 Reilas 9/25/2023 #1

connect 方法会将值解析为 URL 对象,因此将引发 MalformedURLException

例如。

URL url = new URL("oishare/DCIM/100OLYMP");
Exception in thread "main" java.net.MalformedURLException: no protocol: oishare/DCIM/100OLYMP
    at java.base/java.net.URL.<init>(URL.java:764)
    at java.base/java.net.URL.<init>(URL.java:646)
    at java.base/java.net.URL.<init>(URL.java:582)
    at Example.main(Example.java:12)

对文件使用 parse 方法。

d = Jsoup.parse(new File("oishare/DCIM/100OLYMP"));

评论

0赞 laguro 9/26/2023
是的,没有协议,因为如果我离开它,那么我的问题会被论坛视为垃圾邮件,当然有 http oishare/DCIM/100OLYMP
0赞 laguro 9/26/2023
哦,我不明白我做错了什么,我只是无法让它工作。我需要把这个代码行放在哪里?