AsyncTask 运行不正确

我对 AsyncTask 在某一时刻运行但不是下一时刻有一些故障。我已经尽可能地简化了代码。下面的 try/catch 代码在应用程序启动时从 MainActivity 调用时启动我的异步任务。但是,当我将此完全相同的代码放入同一类文件中的按钮时,classCastException 错误会使应用程序崩溃。我对异步有什么不了解的地方吗?谢谢大家。


调用异步的代码:


findViewById(R.id.errorbtn).setOnClickListener( new View.OnClickListener() {

    @Override

    public void onClick(View v) {

try {

    new MainActivity.MyTask().execute(this);

}

catch (Exception e) {

    e.printStackTrace();

}

}});

异步任务:


private class MyTask extends AsyncTask<Object, Void, String> {


MainActivity activity;


@Override

protected String doInBackground(Object... params) {

    activity = (MainActivity)params[0];

    try {

        StringBuilder sb = new StringBuilder();

        URL url = new URL("https://www.example.com");

        BufferedReader in;

        in = new BufferedReader(new InputStreamReader(url.openStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null)

        sb.append(inputLine);

        in.close();


        html = sb.toString();

    }

    catch (Exception e) {

        e.printStackTrace();

    }


    // SOME WORK IS DONE USING HTML VARIABLE & URL DATA...

}


    @Override

    protected void onPostExecute(String str) {


        // RESULT IS LOADED INTO LIST VIEW...

    }

}


catspeake
浏览 151回答 2
2回答

LEATH

问题是您正在使用对 View.OnClickListener() 的引用创建 AsyncTask。将创建行修改为:new&nbsp;MainActivity.MyTask().execute(MainActivity.this);它应该工作。原因很简单:该行位于 OnClickListener 内,因此“this”指的是 Listener,而不是 Activity。通过限定 AsyncTask,您可以更具表现力,如下所示:AsyncTask<MainActivity,&nbsp;Void,&nbsp;String>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python