我对 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;@Overrideprotected 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... }}
2 回答
LEATH
TA贡献1936条经验 获得超6个赞
问题是您正在使用对 View.OnClickListener() 的引用创建 AsyncTask。
将创建行修改为:
new MainActivity.MyTask().execute(MainActivity.this);
它应该工作。
原因很简单:该行位于 OnClickListener 内,因此“this”指的是 Listener,而不是 Activity。通过限定 AsyncTask,您可以更具表现力,如下所示:
AsyncTask<MainActivity, Void, String>
添加回答
举报
0/150
提交
取消