【问题标题】:Web Crawling using AsyncTask使用 AsyncTask 进行网络爬取
【发布时间】:2014-12-15 21:22:53
【问题描述】:

下面是我在 MainActivity 类中的子类 crawlerSub 的 sn-p:

class crawlerSub 扩展 AsyncTask { 私有 int 计数 = 0;

@Override
protected Void doInBackground(Void... params) {
    try {
        Crawler.crawler("http://www.ipmart.com.my", 10);

    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(Void aVoid) {
    File file = null;
    FileOutputStream fos = null;
    try {
        file = this.getFilesDir();
        fos = this.openFileOutput("visitedLinks", Context.MODE_PRIVATE);
        for (String link : Crawler.visitedLinks) {
            fos.write(link.getBytes());
        }
    } catch (FileNotFoundException e) {
        Log.d("Log", e.toString());
    } catch (IOException e) {
        Log.d("Log", e.toString());
    } finally {
        try {
            fos.close();
        } catch (IOException e) {
            Log.d("Log", e.toString());
        }
    }
    Toast.makeText(ctx, "File saved to " + file, Toast.LENGTH_SHORT).show()
} }

我的问题在于这两行代码:

file = this.getFilesDir(); fos = this.openFileOutput("visitedLinks", Context.MODE_PRIVATE);

当我使用“this.getFilesDir()”时,它给了我“无法解决方法错误” 我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: java android android-asynctask


    【解决方案1】:

    使用YourActivity.this.getFilesDir()。在您的代码this 中引用 asyntask 类。但是,您想在活动中使用函数。要使用函数封装类,你应该调用ParentClass.this

    【讨论】:

    • MainActivity.this 也不起作用。它会给出“MainActivity 不是封闭类”错误
    • 那么,您应该将活动作为参数发送到 asyntask。我认为这个异步任务是在活动中定义的。但是,在您发表评论之后,这完全是单独的课程。因此,您必须将活动实例发送到 asyntask。在您的情况下调用 this.getFilesDir 会尝试在 asyntask 中找到一个函数
    【解决方案2】:

    我找到了解决办法:

    class crawlerSub 扩展 AsyncTask { 私有上下文 ctx;

    公共 crawlerSub(上下文 tCtx){ ctx = tctx; }

    我在调用 MainActivity 时将它传递给 crawlerSub,然后它允许我使用 MainActivity 上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2018-10-17
      相关资源
      最近更新 更多