【问题标题】:Java - Web Scraping In Android Studio [duplicate]Java - Android Studio中的网页抓取[重复]
【发布时间】:2020-03-25 18:53:13
【问题描述】:

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

我在应用程序中有 3 个 textView 和一个按钮,所以每当我点击按钮时,它应该在 textView 中显示数据!!

textView 的 ID 为 TotalCases / TotalDeaths / TotalRecovered button 有一个按钮的 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();
        }
    }
}

应用视图的图像

Image of the app view

【问题讨论】:

    标签: java android-studio web-scraping


    【解决方案1】:

    如果您可以发布您收到的错误,那么您会更容易看到发生了什么,但我有两个错误假设。

    首先你应该检查你的 Manifest 是否要求 INTERNET 访问权限。如果不是,您应该包含它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多