Загрузка с URL не работает
Я пытаюсь загрузить изображение (JPG) из URL, используя следующий метод asynctask.
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
2 ответа
Ваш финалhttp://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");
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);