【问题标题】:Loading from URL not working从 URL 加载不起作用
【发布时间】:2014-04-09 11:08:33
【问题描述】:

我正在尝试使用以下 asynctask 方法从 url 加载图像 (JPG)。

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }

我正在像这样在 onCreate 中执行这个方法

new DownloadImageTask((ImageView) findViewById(R.id.imageView1)).execute(final_url);

但是我看不到任何图像,当我调试它时,我发现mIcon11 的值为空。我做错了什么

PS : final_url 是这样的

www.website.com/somelink/IMG 005_153.JPG

【问题讨论】:

  • 顺便说一句,您必须对您的网址进行编码,因为它有一个空格;),您在哪里执行此操作?在 onCreate?尝试在 oncreate 中初始化您的 ImageView 并将其作为全局值存储在您的活动中并将其传递给您的任务
  • 猜这就是问题所在。你能告诉我一种方法吗?

标签: android android-asynctask android-imageview


【解决方案1】:

您的 finalurlhttp://www.website.com/somelink/IMG%20005_153.JPG 没有返回任何内容。检查一下..

在使用前尝试对其进行编码。

String uri = Uri.parse("http://...")
            .buildUpon()
            .appendQueryParameter("key", "val")
            .build().toString();

或尝试关注

String uri = URLEncoder.encode(finalurl, "utf-8");

【讨论】:

  • 这不是实际的链接。实际链接是gateway.ceylonlinux.com/CL_GOLD/view/add_product/upload/BAE005_153.JPG 链接有效
  • 这仍然无法访问,请先尝试一些通用网址,例如从谷歌图片中查看它是否有效,然后检查您的。
  • 问题是你的url需要在发送请求之前进行编码。
  • 一般链接有效。猜猜我必须对网址进行编码。你能告诉我怎么做吗?
  • 我已经补充说,在我的回答中请看一下
【解决方案2】:
private class ImageLoadTask extends AsyncTask<String, Void, Bitmap> {
        private Bitmap bitmap;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            pb1.setVisibility(View.VISIBLE);
            super.onPreExecute();
        }

        @Override
        protected Bitmap doInBackground(String... params) {

            // TODO Auto-generated method stub
            try {
                URL url;
                url = new URL(params[0]);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                bitmap = BitmapFactory.decodeStream(input);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            }
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            im.setImageBitmap(result);
            pb1.setVisibility(View.INVISIBLE);
        }
    }

然后这样称呼它

new ImageLoadTask().execute(STRING URL);

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多