HttpURLConnection catch 块重复
HttpURLConnection catch block repeating
我正在 AsyncTask 中测试不完整的 URL 以处理丢失的图像并为我的图像视图使用默认的可绘制对象。我注意到堆栈跟踪被打印了好几次。我担心这也会一遍又一遍地创建该位图。这是正常的吗?有什么更好地处理这个问题的建议吗?
代码:
@Override
protected Bitmap doInBackground(String... params) {
Bitmap artistImg = null;
HttpURLConnection urlConnection = null;
try {
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
artistImg = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
artistImg = BitmapFactory.decodeResource(
context.getResources(), R.drawable.question);
} catch (Exception e) {
Log.v(LOG_TAG, "NETWORK ERROR");
} finally {
if (urlConnection != null) urlConnection.disconnect();
}
return artistImg;
}
堆栈跟踪(重复 15 次以上):
06-24 10:09:49.354 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ java.io.FileNotFoundException: https://i.scdn.co/image/792a417e8500405
06-24 10:09:49.354 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:206)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.zosocoder.android.spotifystreamer.ArtistAdapter$FetchArtistThumbTask.doInBackground(ArtistAdapter.java:85)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.zosocoder.android.spotifystreamer.ArtistAdapter$FetchArtistThumbTask.doInBackground(ArtistAdapter.java:68)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at android.os.AsyncTask.call(AsyncTask.java:292)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
您可以考虑使用 Picasso or Glide 来加载您的图片。这将使您的图像加载更加简单。这两个库都处理在 background/caching 中加载图像 已经在 disk/specifying 默认图像上加载图像,以防您的请求在检索图像时失败。
加载一张图片就是:
Glide.with(context)
.load("http://goo.gl/gEgYUd")
.placeholder(R.drawable.loading_spinner)
.into(imageView);
我个人更喜欢 Glide,因为我发现它更快,但是这两个库都运行良好,并且可以免除您手动处理位图的麻烦。
Android 查询
Android-Query(AQuery)是一个轻量级库,用于执行异步任务和操作Android中的UI个元素。
你可以从这里查询
https://code.google.com/p/android-query/downloads/detail?name=android-query-full.0.24.3.jar
以及来自
的文档
https://code.google.com/p/android-query/wiki/ImageLoading
您可以通过以下简单代码将图像从 url 加载到您的 imageview
AQuery aq = new AQuery(getApplicationContext());
ImageView image=(ImageView)findViewById(R.id.imageview);
aq.id(image).image("http://www.vikispot.com/z/images/vikispot/android-w.png");
我正在 AsyncTask 中测试不完整的 URL 以处理丢失的图像并为我的图像视图使用默认的可绘制对象。我注意到堆栈跟踪被打印了好几次。我担心这也会一遍又一遍地创建该位图。这是正常的吗?有什么更好地处理这个问题的建议吗?
代码:
@Override
protected Bitmap doInBackground(String... params) {
Bitmap artistImg = null;
HttpURLConnection urlConnection = null;
try {
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream is = urlConnection.getInputStream();
artistImg = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
artistImg = BitmapFactory.decodeResource(
context.getResources(), R.drawable.question);
} catch (Exception e) {
Log.v(LOG_TAG, "NETWORK ERROR");
} finally {
if (urlConnection != null) urlConnection.disconnect();
}
return artistImg;
}
堆栈跟踪(重复 15 次以上):
06-24 10:09:49.354 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ java.io.FileNotFoundException: https://i.scdn.co/image/792a417e8500405
06-24 10:09:49.354 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:206)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.zosocoder.android.spotifystreamer.ArtistAdapter$FetchArtistThumbTask.doInBackground(ArtistAdapter.java:85)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at com.zosocoder.android.spotifystreamer.ArtistAdapter$FetchArtistThumbTask.doInBackground(ArtistAdapter.java:68)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at android.os.AsyncTask.call(AsyncTask.java:292)
06-24 10:09:49.355 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-24 10:09:49.356 21523-21567/com.zosocoder.android.spotifystreamer W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
您可以考虑使用 Picasso or Glide 来加载您的图片。这将使您的图像加载更加简单。这两个库都处理在 background/caching 中加载图像 已经在 disk/specifying 默认图像上加载图像,以防您的请求在检索图像时失败。
加载一张图片就是:
Glide.with(context)
.load("http://goo.gl/gEgYUd")
.placeholder(R.drawable.loading_spinner)
.into(imageView);
我个人更喜欢 Glide,因为我发现它更快,但是这两个库都运行良好,并且可以免除您手动处理位图的麻烦。
Android 查询
Android-Query(AQuery)是一个轻量级库,用于执行异步任务和操作Android中的UI个元素。 你可以从这里查询
https://code.google.com/p/android-query/downloads/detail?name=android-query-full.0.24.3.jar
以及来自
的文档https://code.google.com/p/android-query/wiki/ImageLoading
您可以通过以下简单代码将图像从 url 加载到您的 imageview
AQuery aq = new AQuery(getApplicationContext());
ImageView image=(ImageView)findViewById(R.id.imageview);
aq.id(image).image("http://www.vikispot.com/z/images/vikispot/android-w.png");