【问题标题】:Trying to get text from an url with AsyncTask and Jsoup尝试使用 AsyncTask 和 Jsoup 从 url 获取文本
【发布时间】:2013-11-28 22:14:10
【问题描述】:

网址只是像 www.example.com/example.txt 这样的文本文件,所以我需要做的是从网站获取整个文本。文本可以很长,最长可达 1MB。我不知道我应该如何修改我的代码来做到这一点。

这是我的代码

private class Title extends AsyncTask<Void, Void, Void> {
    String text;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(Story.this);
        progressDialog.setMessage("Loading");
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Document document = Jsoup.connect(url).get();              
            text = document.text();    //I made this part up. Definitely WRONG
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        story.add(text);        //story is an array
        progressDialog.dismiss();
    }
}

我用new Title().execute();调用它

此代码不起作用,我无法获取文本。什么都没有发生。

【问题讨论】:

  • 只是想知道,如果您正在阅读文本文件,为什么要使用 Jsoup 和 Document 类?尝试这个? stackoverflow.com/questions/2922210/…
  • doInBackground 方法返回 null 那么你将在 onPostExecute 上使用什么?我认为 doInBackground 必须返回 sth 才能使用 onPostExecute。
  • 请注意,关于确保流已关闭,并且没有为请求设置超时,答案似乎并不完整,所以买家要小心。

标签: java android android-asynctask html-parsing jsoup


【解决方案1】:

您应该做的是将所有元素添加到Elements 对象。见下文:

@Override
protected Void doInBackground(Void... params) {
    try {
        Document document = Jsoup.connect(url).get();              
    } catch (IOException e) {
        e.printStackTrace();
    }
    Elements elem = null; 
    elem = document.select("*");
    Log.i("Value of elem", String.valueOf(elem);
    return null;
}

那么为你的onPostExecute

@Override
protected void onPostExecute(Void result) {
    String valueofelement = elem.text();
    story.add(valueofelement);        //story is an array
    progressDialog.dismiss();
   }
}

【讨论】:

  • 我在这里得到一个 nullPointerExeption ... for (Element element : elem)
  • 我修复了 NPE,但现在文本仍然没有加载,尽管我没有收到任何错误。这是我更新的代码pastebin.com/0H0971m6
  • 尝试将其更改为迭代器,而不是使用 for 循环。
  • 这里是带有迭代器pastebin.com/xTgz3eWp的代码文本仍未加载。另外,由于数组故事填充了我的列表视图,它不会有数千个列表视图项目吗?我希望将整个文本添加为​​一个元素,从而拥有一个列表项。
  • 哦,有道理。试试这个更新的代码。另外,请检查我放入的日志语句 elem 实际上包含文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2018-07-01
  • 2016-11-15
  • 1970-01-01
  • 2013-06-23
  • 2015-08-08
  • 1970-01-01
相关资源
最近更新 更多