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

当我的android应用程序在android设备/模拟器上运行时,Jsoup不工作

仲孙翔飞
2023-03-14

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

在我的项目根目录中创建了一个名为libs的文件夹,并将我的jar文件放在那里。然后,我转到 Java 构建路径下的项目属性

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

我的Jsoup代码(我在扩展片段的类下创建了一个内部类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表示在方法< code>jsupDataRecevier()中,这一行< code>doc = Jsoup.connect(html)。get();有问题。我不明白我做错了什么。

共有1个答案

夏侯宏旷
2023-03-14

您不能在UI线程中运行网络请求。您正在调用<code>jsupdateracevier()

我从AsyncTask代码中了解到的是,您不了解AsyncTask生命周期

 类似资料:
  • 应用程序不能在MAC上的模拟器和设备上运行,我只得到一个错误,说客户端还没有准备好。 我试图使Android studio失效并重新启动,试图关闭应用程序,卸载,重新运行,禁用即时运行,清理项目,重建,删除Gradle,但这些都不起作用。 下面是我得到的运行日志。 $adb推送 /Users/username/app/App/build/generalDebug-1.6.1-530966e6.ap

  • adb启动服务器adb终止-服务器我尝试了,但没有工作。在com.android.tools.tools.explorer.adbimpl.AdbDeviceFileSystemService.checkState(AdbDeviceFileService.java:221)(位于com.andrid.tools.idea.explorer.adbimpl.AdbDevice FileSystem

  • 它可以在仿真器和真实设备(android版本4)上工作,但不能在真实设备(android版本7.0)上工作 相关代码: logcat: 05-23 10:31:39.464 173 42-17342/laftel.net.laftel E/AndroidRuntime:致命异常:主进程:laftel.net.laftel,pid:17342 java.lang.nullPointerExcepti

  • 是否有方法运行Android模拟器上提供的示例Geofence应用程序:http://developer.Android.com/training/location/geofencing.html 应用程序在启动时关闭,我在Logcat上得到以下错误消息:

  • 问题内容: 我是Android的初学者。我有一个正在运行的模拟器。我创建了一个Android应用。当我运行该应用程序时,它将开始启动新的模拟器并在该新模拟器中运行。但是,我想在正在运行的同一模拟器中运行该应用程序。 问题答案: 打开您创建的运行配置,选择“目标”选项卡。选择单选按钮“在所有兼容设备/ AVD上启动”。将单选按钮下方的组合框切换为“活动AVD”。 这将在所有当前正在运行的模拟器上启动

  • 我的Android Studio应用程序使用了OpenCV和NDK。apk太大了,所以我决定不支持x86设备(我只想支持armeabi-v7a和arm64-v8a),因此C++开发人员删除了对x86 ABI的支持,他不再可用。在我的应用程序分级中,我有: abiFilters'ARMEABI-V7A'、'ARM64-V8A' 然而,现在,该应用程序将在Google Pixel真实设备(或真实设备)