我正在尝试使用我的应用中的网址和按钮下载图片。当我在手机上运行时,我无法下载图像。任何人都可以指出这个问题。感谢您的帮助:)
这是我的代码。
public class MainActivity extends AppCompatActivity {
ImageView download;
public void downloadImage(View view){
DownloadImage image = new DownloadImage();
Bitmap result;
try {
result = image.execute("https://en.wikipedia.org/wiki/File:Bart_Simpson_200px.png").get();
download.setImageBitmap(result);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
download = (ImageView) findViewById(R.id.imageView);
}
public class DownloadImage extends AsyncTask<String, Void, Bitmap>{
@Override
protected Bitmap doInBackground(String... urls) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);
urlConnection.connect();
InputStream in = urlConnection.getInputStream();
Bitmap Image = BitmapFactory.decodeStream(in);
in.close();
return Image;
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
答案 0 :(得分:3)
您可以通过两种方式从网址下载图片
1 。您可以通过用户Glide library从网址加载图片,查看以下代码,它可以以简单的方式为您提供帮助
编译此库
implementation 'com.github.bumptech.glide:glide:4.6.1'
比像这样加载图片
Glide.with(MainActivity.this)
.load(url)
.apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
.into(imageview);
2.如果您不想使用第三方库
,请执行此操作 new DownloadImage(imamgeview).execute(url);
创建异步任务
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImage(ImageView bmImage) {
this.bmImage = (ImageView ) 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.d("Error", e.getStackTrace().toString());
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
我希望它适用于您的情况
答案 1 :(得分:0)
你没有调用函数
downloadImage(view);
在oncreate中(在findviewbyid行之后)
同时检查互联网权限是否在Android清单文件中:
<uses-permission android:name="android.permission.INTERNET" />
说过你应该使用像Glide \ Picasso \ Ion等这样的库...比这个purpuse的asynctask要好得多
https://github.com/bumptech/glide - Glide
https://github.com/koush/ion - 离子
http://square.github.io/picasso/ - 毕加索
希望它有所帮助。