当前位置: 首页 > 知识库问答 >
问题:

Android/JSoup-从标签获取价值

石博艺
2023-03-14

我从外部设备接收数据,并在手机上保存为文本文件。我的问题是——我需要从文本文件中获取值userID。值保存在标签中。例如

<user>1234</user>

我正在尝试使用JSoup来归档这个,但我有一些复杂问题。

下面是我的代码

public CommunicationThread(Socket clientSocket) {
            this.clientSocket = clientSocket;
            try {
                InputStream in = this.clientSocket.getInputStream();
                Date date = new Date();
                File root = new File("/sdcard/mente/" + user.getID() );
                if(!root.exists())
                root.mkdirs();
                String fileName = connectedDeviceSerialNumber + "_" + date + ".txt".replace(" ","_");
                file = new File(root,fileName);
                OutputStream out = new FileOutputStream(file);
                int count;
                StringBuilder sb = new StringBuilder();

                while ((count = in.read(bytes)) > 0) {
                    out.write(bytes, 0, count);
                    for (byte b : bytes) {
                        sb.append(String.format("%02X ", b));
                    }
                    Log.e(TAG, "CommunicationThread: " + sb.toString() );
                    if (sb.toString().contains("3C 65 6E 64 5F 72 61 77 3E 74 72 75 65 3C 2F 65 6E 64 5F 72 61 77 3E") && syncProgressDialog != null) {
                        syncProgressDialog.dismiss();
                    }

                }
                Document doc = Jsoup.parse(sb.toString());
                Elements el = doc.select("user");
                String userId = el.attr("user");
                Log.e(TAG, "STR: " + userId );


                this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream(), Charset.forName("ISO-8859-2")));
                Log.e(TAG, "synchData1: ");

            } catch (IOException e) {
                Log.e(TAG, "error: " + e.getMessage());
            }
        }

提前感谢您的帮助:)

共有1个答案

许沛
2023-03-14

我猜你没有正确理解课文

相反

Document doc = Jsoup.parse(sb.toString());
Elements el = doc.select("user");
String userId = el.attr("user");

你应该的

String userId = "";

Document doc = Jsoup.parse(sb.toString());
Elements el = doc.select("user"); // el is an ArrayList... not a single element...
if(!el.isEmpty()) {
    Element singleElement = el.get(0);
    if (singleElement.hasText()) {
        userId = singleElement.text(); // Don't read attr... but text()
    } else {
        Log.e(TAG, "tag <user> has no text");
    }
} else {
    Log.e(TAG, "tag <user> not fould");
}

编辑

我使用以下格式的文件进行了测试:

<user>1234</user>
<pass>1234</pass>

它很好用。你说不适合你,所以,也许,sb。toString()不包含正确的文本(您可以通过日志确认…log.e(标记“sb:”sb.toString()) )或者它有一个我测试过的不同格式。。。。所以,请分享一个你正在阅读的字符串示例。

 类似资料:
  • 我想从URL示例中获取一个图像博客头像:https://soundcloud.com/topsify 我试图得到: 但它还是空的。请支持获取头像url:https://i1.sndcdn.com/avatars-000132054558-5ra8gl-t500x500.jpg谢谢

  • 问题内容: 我有一个Div标签,如下所示 我如何获得eventTTL的值?我想显示eventTTL的值,即:)“ 4583476000”。 问题答案: 有关更多信息,请访问:https : //jsoup.org/cookbook/extracting-data/attributes-text- html

  • 假设我在一个页面上有3个文本框,定义如下。 我将把值“Open”作为参数传递给JSoup,JSoup应该返回如下数据(这是中间文本框的详细信息)。 JSoup能做到吗? 谢谢您 -阿努普

  • 问题内容: 我是Flask的新手,我无法从我的select标签获取值。我试过返回错误请求。但是,当我尝试使用时,返回页将返回一个空白列表“ []”。 我的html: 我的app.py: 抱歉,如果我的帖子格式关闭(这也是Stack Overflow的新功能)。 问题答案: 从您提供的内容中很难确定,但是我相信您需要添加您的元素。 从烧瓶文档中找到对象: 要访问表单数据(在POST或PUT请求中传输

  • 我正在尝试从网站获取一些数据。它看起来像这样 我只需要得到div标签中的时间值。这是我的Java代码。 它没有给出任何错误,但在日志上 "D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认设置" 我看到也许这可以帮助你解决问题。提前感谢您,任何回应将不胜感激。

  • 本文向大家介绍android Jsoup获取网站内容 android获取新闻标题实例,包括了android Jsoup获取网站内容 android获取新闻标题实例的使用技巧和注意事项,需要的朋友参考一下 近期做简单的新闻客户端界面使用到了Jsoup获取,使用起来特别方便,这也是被我一个学长称为学android网络必学的一个东西,在此也是分享一下自己近期所学。 首先还是给出效果: 上面是通过text