【发布时间】:2014-08-23 01:16:11
【问题描述】:
我正在尝试使用此网址中的图片: http://www.bisonsoftware.us/hhs/image/1.png
我想拍摄这张图片并将其设置在 imageview 中,我只是在寻找最简单的方法。
我尝试了这个解决方案,但它似乎对我不起作用,它给出了一个错误,说 malformedurlexception: Load image from url
【问题讨论】:
我正在尝试使用此网址中的图片: http://www.bisonsoftware.us/hhs/image/1.png
我想拍摄这张图片并将其设置在 imageview 中,我只是在寻找最简单的方法。
我尝试了这个解决方案,但它似乎对我不起作用,它给出了一个错误,说 malformedurlexception: Load image from url
【问题讨论】:
在您的项目中添加此库后。 在必要的地方写下这段代码
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);
【讨论】:
使用毕加索图书馆https://square.github.io/picasso/
应该是这样的:
Picasso.with(context).load("http://www.bisonsoftware.us/hhs/image/1.png").into(imageView);
【讨论】:
如果你只想使用原生安卓代码,可以使用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是否正确,如果需要正确编码。
【讨论】:
你可以像 Shobhit 描述的那样用困难的方式来做,或者有一个库可以为你做同样的事情(创建另一个线程来渲染图像),比如前面提到的 picasso 或 UniversalImageLoader:https://github.com/nostra13/Android-Universal-Image-Loader
【讨论】:
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);
}
}
}
这对我有用。
【讨论】:
尝试像这样实现。它对我有用,可以从 url 下载图像。
并且不要忘记在 manifest 文件中添加 Internet 权限,像这样-<uses-permission android:name="android.permission.INTERNET"/>
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;
}
}
}
快乐编码:)
【讨论】: