永远不会调用 AsyncTask 错误 onPostExecute

AsyncTask Error onPostExexcute is never called

这是我的 AsyncTask

private class RetrieveFeedTask extends AsyncTask<Void, Void, String> {

    private Exception exception;

    protected void onPreExecute() {
        progressBar.setVisibility(View.VISIBLE);
        sqNameTV.setText("");
        sqdescriptionTV.setText("");
        sqdetailedDescriptionTV.setText("");
    }

    protected String doInBackground(Void... urls) {





        try {
            URL url = new URL(URLi);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append(" ");
                }
                bufferedReader.close();
                String ress = stringBuilder.toString();
                JSONObject object = new JSONObject(ress);
                JSONArray itemListElement = object.getJSONArray("itemListElement");
                InputStream is;
                for (int i = 0; i < itemListElement.length(); i++) {
                    JSONObject c = itemListElement.getJSONObject(i);
                    JSONObject results = c.getJSONObject("result");
                    JSONObject image = results.getJSONObject("image");
                    String contentUrl = image.getString("contentUrl");
                    is = (InputStream) new URL(contentUrl).getContent();
                    d = Drawable.createFromStream(is, "src name");
                }
                return stringBuilder.toString();
            } finally {
                urlConnection.disconnect();
            }
        } catch (Exception e) {
            Log.e("ERROR", e.getMessage(), e);
            return null;
        }
    }

    protected void onPostExecute(String response, Drawable dd) {
        if (response == null) {
            response = "THERE WAS AN ERROR";
            Toast.makeText(MainActivity.this, "post execute", Toast.LENGTH_LONG).show();
        }
        progressBar.setVisibility(View.GONE);
        Log.i("INFO", response);

        // Appropriate error handling code
        try {
            JSONObject object = new JSONObject(response);
            JSONArray itemListElement = object.getJSONArray("itemListElement");
            for (int i = 0; i < itemListElement.length(); i++) {
                JSONObject c = itemListElement.getJSONObject(i);
                JSONObject results = c.getJSONObject("result");
                String name = results.getString("name").toString();
                String description = results.getString("description").toString();
                JSONObject image = results.getJSONObject("image");
                String contentUrl = image.getString("contentUrl");
                JSONObject detailedDescription = results.getJSONObject("detailedDescription");
                String articleBody = detailedDescription.getString("articleBody");
                sqNameTV.setText(name);
                sqdescriptionTV.setText(description);
                Drawable imageQ = LoadImageFromWebOperations(contentUrl);
                Log.e("TAG",contentUrl);
                sIV.setImageDrawable(d);
                sqdetailedDescriptionTV.setText(articleBody);
            }
        } catch (JSONException e) {
            sqNameTV.setText("Empty");
            sqdescriptionTV.setText("No Data Found");
            sqdetailedDescriptionTV.setText("Could not find any data on " + queryyy);
        }
    }
}
private Drawable LoadImageFromWebOperations(String strPhotoUrl) {
    try {
        InputStream is = (InputStream) new URL(strPhotoUrl).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        Log.e("TAGG", strPhotoUrl);
        return d;
    } catch (Exception e) {
        Log.e("TAGG", e.toString());
        return null;
    }

它运行正常。后来因为我也需要获取图像,所以我在 doInBackground() 中放置了一些 JSON 解析。然后由于某种原因永远不会调用 onPostExecute。知道为什么吗?谢谢

A​​syncTask 声明中的第三个参数定义了 AsyncTask 的 return 类型。

private class RetrieveFeedTask extends AsyncTask<Void, Void, String>

因此,根据您的定义,onPostExecute() 方法应该只需要一个 String 作为参数,因为您 return 只是来自后台线程的字符串。您对 onPostExecute() 的定义有两个参数。应该只有一个,定义为 return 类型的 AsyncTask。

您的 onPostExecute() 表现为一个独立的方法 -

protected void onPostExecute(String response, Drawable dd)

按照AysncTask的设计,如果想让Android系统调用onPostExecute(),那么应该这样设计-

protected void onPostExecute(String response)

对于

 AsyncTask<Void, Void, String>, 
1st Void - Paramater type in doInBackground()
2nd Void - Paramater type in onProgressUpdate()
3rd String - Return type of  doInBackground() and Paramater type in onPostExecute()