java - 异步任务#1 :An error occured while executing doInBackground()

标签 java android

我正在使用 Jsoup 开发应用程序。问题是当我在 Getters 的帮助下从其他类调用它时它不起作用。但当我在单个 Activity 中调用它时它正在运行。我无法确切地找到为什么它不起作用,因为它应该起作用。 以下是包含所有 Activity 的 logCat 文件。

LogCat

11-14 20:16:52.063: E/AndroidRuntime(1871): FATAL EXCEPTION: AsyncTask #1
11-14 20:16:52.063: E/AndroidRuntime(1871): java.lang.RuntimeException: An error occured while executing doInBackground()
11-14 20:16:52.063: E/AndroidRuntime(1871):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.lang.Thread.run(Thread.java:856)
11-14 20:16:52.063: E/AndroidRuntime(1871): Caused by: java.lang.IllegalArgumentException: Must supply a valid URL
11-14 20:16:52.063: E/AndroidRuntime(1871):     at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at org.jsoup.helper.HttpConnection.url(HttpConnection.java:57)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:27)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at org.jsoup.Jsoup.connect(Jsoup.java:73)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at com.example.frgbdf.jsoupAct$Parsee.doInBackground(jsoupAct.java:30)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at com.example.frgbdf.jsoupAct$Parsee.doInBackground(jsoupAct.java:1)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-14 20:16:52.063: E/AndroidRuntime(1871):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-14 20:16:52.063: E/AndroidRuntime(1871):     ... 4 more

主要 Activity

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent i = new Intent(getApplicationContext(), LineGraph.class);
        startActivity(i);
    }
}

折线图

public class LineGraph extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        jsoupAct mJsoupAct = new jsoupAct();
        String parseStrings;
        parseStrings = mJsoupAct.getOutput();
        Log.d("xstring", parseStrings + "");
    }
}

jsoup法案

public class jsoupAct extends Activity {
    String output = "00";
    String url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        url = "www.google.com";
    }

    public void mExecute() {
        new Parsee().execute();

    }

    public class Parsee extends AsyncTask<String, String, String> {

        protected String doInBackground(String... params) {
            try {
                Document doc = Jsoup.connect(url).get();
                String body = doc.body().text();
                output = body.toString();
            } catch (IOException e) {

                e.printStackTrace();
            }
            return output;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(output);
        }

    }

    public String getOutput() {
        mExecute();
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }
}

最佳答案

您正在为jsoupAct Activity 指定本地字符串中的URL。如果您尝试从其他 Activity 访问,该字符串将为空。要解决此问题,请将字符串移动到 AsyncTask 类中,它将起作用

或者向 jsonAct Activity 添加空构造函数,并在其中分配 url 的值。 onCreate() 仅在使用 startActivity()

启动 Activity 时调用

关于java - 异步任务#1 :An error occured while executing doInBackground(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980856/

相关文章:

android - 在android中应该使用哪种数据类型进行精确计算

java - 2.2 中与布局安排相关的 Android 微调器错误

android - 如何使用 [zxing] 在 android 中的 QR 码中心添加 Logo

android - 在没有开发服务器的设备上构建和安装未签名的 apk?

Android:在震动监听器类中使用 SharedPreferences

java - Tomcat - 上下文路径匹配究竟是如何工作的?

java - 根据另一个列表从列表中过滤元素

Java 对象、更改的字段监听器、设计模式

java - 使用 Install4J 将 javax 复制到 JRE

java - 使用 JTextField 进行 JTable 过滤不起作用