【问题标题】:Loading Image From URL Into Imageview将图像从 URL 加载到 Imageview
【发布时间】:2014-08-23 01:16:11
【问题描述】:

我正在尝试使用此网址中的图片: http://www.bisonsoftware.us/hhs/image/1.png

我想拍摄这张图片并将其设置在 imageview 中,我只是在寻找最简单的方法。

我尝试了这个解决方案,但它似乎对我不起作用,它给出了一个错误,说 malformedurlexception: Load image from url

【问题讨论】:

    标签: android android-imageview


    【解决方案1】:

    使用universal image library

    在您的项目中添加此库后。 在必要的地方写下这段代码

    ImageLoader imageloader;
    DisplayImageOptions options;
    imageloader = ImageLoader.getInstance();
            String url="http://www.bisonsoftware.us/hhs/image/1.png";
            imageloader.init(ImageLoaderConfiguration.createDefault(getApplicationContext()));
            options = new DisplayImageOptions.Builder()
                    .showImageForEmptyUri(R.drawable.ic_empty)
                    .showImageOnFail(R.drawable.ic_error)
                    .resetViewBeforeLoading(true).cacheOnDisk(true)
                    .imageScaleType(ImageScaleType.EXACTLY)
                    .bitmapConfig(Bitmap.Config.RGB_565).considerExifParams(true)
                    .displayer(new FadeInBitmapDisplayer(300)).build();
    
    imageloader.displayImage(url,imageview);
    

    【讨论】:

      【解决方案2】:

      使用毕加索图书馆https://square.github.io/picasso/

      应该是这样的:

      Picasso.with(context).load("http://www.bisonsoftware.us/hhs/image/1.png").into(imageView);
      

      【讨论】:

      • 在 android 内部有什么那么简单的吗?我真的不想使用图书馆。
      • @user3358306 在我发布的答案中没有使用其他库。尝试一下。
      • 我在几个项目中使用过毕加索,它必须有我的图书馆。它处理缓存(内存和磁盘缓存),安全调整大小/裁剪,自定义转换(例如:圆形图像),还可以与适配器(listview ...)一起使用它还可以加载本地文件(它还可以处理许多 OOM 异常 - 通过使用 fit () 方法...)。
      • 你当然可以自己做,但你必须想出调整大小、缓存、转换或裁剪图像、处理下载重定向、http错误等的解决方案。毕加索免费做所有这些它都是经过良好测试和维护的代码。所以强烈建议使用它而不是自己开始编写。
      【解决方案3】:

      如果你只想使用原生安卓代码,可以使用AsyncTask下载,然后设置在onPostExecute

      称它为:

      //pass image view while creating AskyncTask object and pass url as parameter
      new DownloadImageTask((ImageView) findViewById(R.id.yourImageView)).execute("your_url_here");
      

      要调用的AsynTask:

      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);
          }
      }
      

      我刚刚看到您在问题中提到的网址中也提到了类似的答案。这适用于我的应用程序。如果它给出MalformedUrlException,那么你可以尝试检查url是否正确,如果需要正确编码。

      【讨论】:

        【解决方案4】:

        你可以像 Shobhit 描述的那样用困难的方式来做,或者有一个库可以为你做同样的事情(创建另一个线程来渲染图像),比如前面提到的 picasso 或 UniversalImageLoader:https://github.com/nostra13/Android-Universal-Image-Loader

        【讨论】:

          【解决方案5】:
          public class MainActivity extends Activity {
          
          private Bitmap bitmap;
          private ImageView imageView;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              imageView=(ImageView)findViewById(R.id.imageView1);
              new downloadimage().execute();
          }
          private class downloadimage extends AsyncTask<Void, Void, Void>
          {
          
              @Override
              protected Void doInBackground(Void... params) {
                  URL url;
                  try {
                      url = new URL("http://www.bisonsoftware.us/hhs/image/1.png");
                      bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
          
          
                  } catch (MalformedURLException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
          
          
                  return null;
              }
              @Override
              protected void onPostExecute(Void result) {
                  // TODO Auto-generated method stub
                  super.onPostExecute(result);
                  imageView.setImageBitmap(bitmap);
              }
          }
          }
          

          这对我有用。

          【讨论】:

            【解决方案6】:

            尝试像这样实现。它对我有用,可以从 url 下载图像。 并且不要忘记在 manifest 文件中添加 Internet 权限,像这样-&lt;uses-permission android:name="android.permission.INTERNET"/&gt;

            import java.io.IOException;
            import java.io.InputStream;
            import java.net.HttpURLConnection;
            import java.net.URL;
            import java.net.URLConnection;
            
            import android.app.Activity;
            import android.app.ProgressDialog;
            import android.graphics.Bitmap;
            import android.graphics.BitmapFactory;
            import android.os.AsyncTask;
            import android.os.Bundle;
            import android.widget.ImageView;
            
            public class MainActivity extends Activity {
            ProgressDialog progressDialog;
            ImageView imageView;
            Bitmap map = null;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                imageView = (ImageView) findViewById(R.id.imageView);
                new loadImage().execute();
            }
            
            public class loadImage extends AsyncTask<Void, Void, Void> {
            
                @Override
                protected void onPreExecute() {
            
                    progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setMessage("Please wait...");
                    progressDialog.setCancelable(false);
                    progressDialog.show();
            
                }
            
                @Override
                protected Void doInBackground(Void... params) {
            
                    map = downloadImage("http://www.bisonsoftware.us/hhs/image/1.png");
            
                    return null;
                }
            
                @Override
                protected void onPostExecute(Void result) {
                    progressDialog.dismiss();
                    imageView.setImageBitmap(map);
                }
            }
            
            // Creates Bitmap from InputStream and returns it
            private Bitmap downloadImage(String url) {
                Bitmap bitmap = null;
                InputStream stream = null;
                BitmapFactory.Options bmOptions = new BitmapFactory.Options();
                bmOptions.inSampleSize = 1;
            
                try {
                    stream = getHttpConnection(url);
                    bitmap = BitmapFactory.decodeStream(stream, null, bmOptions);
                    stream.close();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                return bitmap;
            }
            
            // Makes HttpURLConnection and returns InputStream
            private InputStream getHttpConnection(String urlString) throws IOException {
                InputStream stream = null;
                URL url = new URL(urlString);
                URLConnection connection = url.openConnection();
            
                try {
                    HttpURLConnection httpConnection = (HttpURLConnection) connection;
                    httpConnection.setRequestMethod("GET");
                    httpConnection.connect();
                    if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                        stream = httpConnection.getInputStream();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                return stream;
            }
            
            @Override
            public void onDestroy() {
                super.onDestroy();
                if (progressDialog != null && progressDialog.isShowing()) {
                    progressDialog.cancel();
                }
            }
            
            @Override
            protected void onStop() {
                super.onStop();
                if (progressDialog != null) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
            }  
            }
            

            快乐编码:)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-03-12
              • 2014-05-09
              相关资源
              最近更新 更多