gpt4 book ai didi

java - 当我的 Android 应用程序在 Android 设备/模拟器上运行时,Jsoup 无法工作

转载 作者:行者123 更新时间:2023-12-01 11:38:45 25 4
gpt4 key购买 nike

我正在尝试在我的 android 项目中使用 jsoup 。我以这种方式将 jsoup 添加到我的项目中:

在项目的根目录中创建了一个名为 libs 的文件夹,并将我的 jar 文件放在那里。然后,我转到项目属性,在 Java 构建路径 > 库下,单击添加 JAR... 并在 libs 文件夹下选择 jsoup jar 文件。

一切都很好,但是当我尝试在模拟器上运行它时,应用程序显示[不幸的是,Weather BD 已停止],它向我显示以下错误:LogCat

enter image description here enter image description here

我的 Jsoup 代码(我在扩展 Fragment 的类下创建了一个内部类 AsyncTaskParser)。

private class AsyncTaskParser extends AsyncTask<Void, Void, Boolean> {

CustomProgressBar progress;

@Override
protected void onPreExecute() {
super.onPreExecute();

progress = new CustomProgressBar(getActivity());
progress.setCancelable(true);
progress.setIndeterminate(true);
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.show();

}

@Override
protected Boolean doInBackground(Void... arg0) {

publishProgress();

return true;
}

@Override
protected void onProgressUpdate(Void... value) {
jsupDataRecevier();
bmdAdapter = new BMDListAdapter(getActivity(), city_name, minTemp,
maxTemp, sunSet, sunRise);

list.setAdapter(bmdAdapter);

progress.dismiss();

}

@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);

if (result == true) {
// Log.e(getClass().getName(), "Json Parsing Succesfull");
} else {
Toast.makeText(getActivity(),
"Sorry unable to get data, Try again later",
Toast.LENGTH_LONG).show();
}
}


public void jsupDataRecevier() {
String html = "http://www.bmd.gov.bd/?/home/";
Document doc;
try {
doc = Jsoup.connect(html).get();
Elements link = doc.select("div").attr("class", "forecastbox ");
String linkText = link.text();

linkText = linkText.substring(0, linkText.indexOf("| Bangladesh"));

linkText = linkText.replace("| ", "--");
String modifiedText[] = linkText.split("--");

int j;
boolean flag = true; // will determine when the sort is finished
String temp;

while (flag) {
flag = false;
for (j = 0; j < modifiedText.length - 1; j++) {
if (modifiedText[j]
.compareToIgnoreCase(modifiedText[j + 1]) > 0) { // ascending
// sort
temp = modifiedText[j];
modifiedText[j] = modifiedText[j + 1]; // swapping
modifiedText[j + 1] = temp;
flag = true;
}
}
}

Scanner inp;
for (int i = 0; i < modifiedText.length; i++) {

inp = new Scanner(modifiedText[i].trim());
String distric = modifiedText[i].substring(0,
modifiedText[i].indexOf(':'));
city_name.add(distric);

inp = new Scanner(modifiedText[i].substring(
modifiedText[i].indexOf(":"), modifiedText[i].length()));
inp.next();
String maxTemperature = inp.next();
maxTemperature = inp.next().substring(0, 4);
maxTemp.add(maxTemperature);

String minTemperature = inp.next() + inp.next();
minTemperature = inp.next().substring(0, 4);
minTemp.add(minTemperature);

inp.next();
inp.next();
inp.next();

String sunrise = inp.next().replace('-', ':') + " "
+ inp.next();
sunRise.add(sunrise);

inp.next();
inp.next();
inp.next();
String sunset = inp.next().replace('-', ':') + " " + inp.next();
sunSet.add(sunset);
}

} catch (IOException ex) {
Toast.makeText(getActivity(), "Sorry try again later",
Toast.LENGTH_LONG).show();
Intent homeIntent = new Intent(getActivity(), MainActivity.class);
startActivity(homeIntent);
}
}


}

LogCat 表明在方法 jsupDataRecevier() 中,此行 doc = Jsoup.connect(html).get(); 有问题。我不明白我做错了什么。

最佳答案

您无法在 UI 线程中运行网络请求。您正在从 UI 线程中运行的 onProgressUpdate() 调用 jsupDataRecevier();,这违反了上述策略。您应该在 doInBackground()

中使用 jsoup

我从您的 AsyncTask 代码中了解到,您不了解 AsyncTask 生命周期以及如何正确使用。要快速查看,您可以查看此 AsyncTask Tutorial

关于java - 当我的 Android 应用程序在 Android 设备/模拟器上运行时,Jsoup 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29733479/

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