android - 需要使用 for 循环中使用的变量

标签 android for-loop imageview jsoup

我有一个 AsyncTask 类,我必须使用该变量在 ImageView 中显示图片。我使用 jsoup 库来解析 html 页面,问题是我无法将我的变量“位图”从 doInBackground 带到 onPostExecute 方法。我该如何解决我的问题? 这是代码:

private class ParseHTML extends AsyncTask<Void, Void, Void>{
        String resultTextFmt;
        Bitmap bm;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("WebMD");
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }
        @Override
        protected Void doInBackground(Void... params){
            try{
                Document document = Jsoup.connect(mURL).get();

                Elements description2 = document.select("h2[class=et_pt_title]");
                Log.v("Data3", description2.toString());
                resultTextFmt = description2.toString();
                Elements divs = document.select("img");
                Log.w("DIVS_PICS", divs.toString());
                Bitmap  bitmap;
                for (Element div : divs) {
                    Log.d("web Stuff",div.text());


                  //  Element myImage = div;
                    String iurl;
                    iurl = div.absUrl("src");
                    Log.w("ABSurl:",iurl.toString());
                    URL url = new URL(iurl);
                    bitmap = BitmapFactory.decodeStream(url.openStream()); // I need to get this var

                }
                bm = bitmap;

            } catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void result){
            imgView.setImageBitmap(bm); // and put it here to show 
            textView.setText(Html.fromHtml(resultTextFmt));
            mProgressDialog.dismiss();
        }
    }

最佳答案

您需要像这样声明您的 AsyncTask:

private class ParseHTML extends AsyncTask<Void, Void, Bitmap>{

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
    }
    @Override
    protected Bitmap doInBackground(Void... params){
        Bitmap returnValue = new Bitmap();
        return returnValue;
    }
    @Override
    protected void onPostExecute(Bitmap result){
        imgView.setImageBitmap(result);
    }

}

如您所见,您可以在类定义中将结果值参数化为 doInBackground() 的位图。这样,您还将在 onPostExecute() 回调中收到此值,并在合成后在那里处理 Bitmap。

如果您还想通过处理输入参数来使其更复杂,或者,例如,学习如何监控进程,您有关于 AsyncTask 的官方文档 here .

关于android - 需要使用 for 循环中使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24976261/

相关文章:

javascript - 如何开发phonegap SQLite数据库

android - supportInvalidateOptionsMenu() 是否有效?

java - 在 TextView 中加减数字

java - 向文件添加动态名称

android - Viewpager onClickListener 在 android 中引用了错误的 View

Android NotificationManager 给我 "no valid small icon"错误

java 两个循环然后改变状态

android - 缓存图像并显示

android - 如何将 BitmapDrawable 设置到 ImageView 中?

javascript - 在for循环中调用异步函数