亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AsyncTask 運行不正確

AsyncTask 運行不正確

catspeake 2021-09-26 16:40:26
我對 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條經驗 獲得超7個贊

問題是您正在使用對 View.OnClickListener() 的引用創建 AsyncTask。

將創建行修改為:

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

它應該工作。

原因很簡單:該行位于 OnClickListener 內,因此“this”指的是 Listener,而不是 Activity。通過限定 AsyncTask,您可以更具表現力,如下所示:

AsyncTask<MainActivity, Void, String>


查看完整回答
反對 回復 2021-09-26
  • 2 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號