gpt4 book ai didi

Java - Android Studio 中的网页抓取

转载 作者:行者123 更新时间:2023-12-01 17:46:43 24 4
gpt4 key购买 nike

我正在尝试从网站 https://www.worldometers.info/coronavirus/ 进行网络抓取并将该数据转换为一个应用程序,但数据实际上并未打印,我不知道原因,但每当我单击 Android 模拟器中的按钮时,它就会立即崩溃!

我的应用程序中有 3 个 textView 和一个按钮,因此每当我单击按钮时,它都应该在 textView 中显示数据!!

textView 的 ID 为 TotalCases/TotalDeaths/TotalRecovered按钮有一个按钮的 id

这是我所做的

package com.example.coronaupdate;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.widget.Button;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
Button btn;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
compare();
}
});

}
public void compare()
{
final TextView totalCases;
final TextView totalDeaths;
final TextView totalRecovered;

totalCases = (TextView) findViewById(R.id.TotalCases);
totalDeaths = (TextView) findViewById(R.id.TotalDeaths);
totalRecovered = (TextView) findViewById(R.id.TotalRecovered);

try {
Document doc = Jsoup.connect("https://www.worldometers.info/coronavirus/").userAgent("mozilla/17.0").get();
Elements temp = doc.select("div.maincounter-number");


Element totalcase = temp.get(0);
String cases = totalcase.select("div.maincounter-number span").text();
totalCases.setText(cases);

Element totaldeaths = temp.get(1);
String deaths = totaldeaths.select("div.maincounter-number span").text();
totalDeaths.setText(deaths);

Element totalrecovered = temp.get(2);
String recovered = totalrecovered.select("div.maincounter-number span").text();
totalRecovered.setText(recovered);

/* for(Element totalCase:temp)
{
String cases = totalCase.select("div.maincounter-number span").text();
System.out.println("" + cases);
*//*i++;
System.out.println(i + "" + totalCase.getElementsByTag("span"));*//*
}*/
}

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

应用程序 View 的图像

Image of the app view

最佳答案

如果您可以发布您收到的错误,则可以更轻松地了解发生了什么,但我对问题有两个假设。

首先,您应该检查 Manifest 是否请求 INTERNET 访问权限。如果不是,您应该将其包含在内。

第二:在 Android 中向互联网发出请求时,您始终应该使用 AsyncTasks 或至少手动打开一个单独的线程。这是因为根据定义,互联网调用是异步的,如果您阻止应用程序的主要执行以等待响应,则 UI 将卡住或崩溃。因此,也许您应该将 compare() 函数的逻辑提取到一个继承自 AsyncTask 的单独类,并将其放入 doInBackground() 方法中。

关于Java - Android Studio 中的网页抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com