我对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;
}
}
}
只需使用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名命中的