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

在Andorid上从Jsoup文档编写文件并搜索特定令牌

司寇琨
2023-03-14

我对android非常陌生,正在尝试为一个学校项目创建一个应用程序,该应用程序可以从一个网站上获取信息。我正在使用Jsoup创建一个文档,然后尝试将来自站点的html存储为本地文件。我想要的数字是写在“平均”后面的长html文件,所以我试图提取这部分。例如,令牌可能看起来像“class=sep-t>average30 °C

当我运行这个应用程序时,当我点击按钮时,它会冒火。我在onClick函数中获得java.lang.NumberFormatException:空字符串。这是否意味着我的文件没有正确写入?我该如何解决这个问题呢?

提前谢谢!详细的回答非常感谢,因为我不习惯java编程。也会喜欢一些技巧如何提取数字在一个更有效的方式。

import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;


public class MainActivity extends AppCompatActivity {
    private TextView ViewT;
    private Double tempDouble;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button1);
    ViewT = (TextView) findViewById(R.id.ViewT);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new getData().execute();
            File fileR = new File(getFilesDir(), "Tempfile.txt");
            Scanner scR = null;
            try {
                scR = new Scanner(fileR);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }//Det funkar hit
            while (scR.hasNext()) {
                String line = scR.next();
                if (line.matches("[Average</th><td>]")) {
                    String temperature = line.replaceAll("[^0-9]+", "");
                    double tempDouble = Double.parseDouble(temperature); //d == 3.78d
                    ViewT.setText(temperature);
                    Toast toast = Toast.makeText(getApplicationContext(), line, Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
        }
    });
}

public class getData extends AsyncTask<Void, Void, Void> {
    String avgT;
    String fileNameT = "Tempfile.txt";


    @Override
    protected Void doInBackground(Void... params) {

         Document temp;
        try {
            temp = Jsoup.connect("http://www.timeanddate.com/weather/singapore/singapore/historic").get(); //avg temp
            avgT=temp.html();
            FileWriter fw1 = new FileWriter(fileNameT);
            PrintWriter pw1 = new PrintWriter(fw1);
            pw1.println(avgT);
            pw1.close();
            fw1.close();
            FileOutputStream fos = openFileOutput(fileNameT, Context.MODE_PRIVATE);
            fos.write(avgT.getBytes());
            fos.close();

        }catch (Exception e){e.printStackTrace();} 

        return null;

    }



    }

}

共有1个答案

邵沛
2023-03-14

只需使用jsoup使用CSS选择器选择元素。

Document temp = Jsoup.connect("http://www.timeanddate.com/weather/singapore/singapore/historic").get();

Element avgTemp = temp.select("tr.sep-t > td").first();
System.out.println(avgTemp.text());
30 °C
 类似资料:
  • 如何从以后的每次搜索中排除目录中的文件,而无需手动键入排除项。

  • 编辑1:我也试过这个,但同样的问题。

  • Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,请读者举一反三. 再以“爱丽丝”文档作为例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p><b>The Dormouse's story</b><

  • Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,请读者举一反三. 再以“爱丽丝”文档作为例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormous

  • 作为开放平台,必须要提供API文档。 SOP采用微服务架构实现,因此文档应该由各个微服务各自实现。难点就是如何统一归纳各个微服务端提供的文档信息,并且统一展示。 写完接口后使用swagger注解来定义自己的文档信息。步骤如下: maven添加swagger <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId>

  • 我需要你帮助我设计一个真实场景的索引。这可能是一个很长的问题,让我尽量简明扼要地解释一下。 我们正在构建一个基于Elasticsearch的搜索平台,为客户提供站点搜索体验,索引中的文档可以是这样的: 对于每个查询,返回的命中文档默认按相关性排序,但我们的客户还希望为一些关键字提升一些特定文档, 它们为我们提供了以下内容,如增强配置XML: 也就是说,如果用户搜索“keyword1”,前1名命中的