第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么傳遞過去的圖片的URI如果有為空的時候程序會崩掉

是從網(wǎng)上獲取到的接口,這個接口的圖片地址有一兩個是為空的,為什么傳遞過去的圖片的URI如果有為空的時候程序會崩掉,調(diào)用public void showImageByAsyncTask(ImageView imageView, String Url)方法就會報java.lang.RuntimeException: An error occured while executing doInBackground()異常,圖片的地址有的話就能正常顯示http://img1.sycdn.imooc.com//5737d3bf0001bb1607910731.jpg


package com.example.mediaplayer;


import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v4.util.LruCache;
import android.widget.ImageView;
import android.widget.ListView;


public class lvImageLoader {
?private ImageView mImageView;
?private String murl;
?private ListView mListView;
?private Set<NewsAsyncTask> mTask;
?// 創(chuàng)建緩存機制 Cache
?private LruCache<String, Bitmap> mLruCache;


?public lvImageLoader(ListView listView) {
??mListView = listView;
??mTask = new HashSet<NewsAsyncTask>();
??// 獲得當前最大可用內(nèi)存
??int maxMemroy = (int) Runtime.getRuntime().maxMemory();
??// 設置最大緩存大小
??int cacheSize = maxMemroy / 4;
??mLruCache = new LruCache<String, Bitmap>(cacheSize) {
???// 在每次加入內(nèi)存緩存時候調(diào)用
???protected int sizeOf(String key, Bitmap value) {
????// 在每次存入緩存的時候給予bitmap準確的大小
????return value.getByteCount();
???};
??};
?}


?/**
? * 增加緩存
? *
? * @param url
? * @param bitmap
? */
?public void addBitmapToCache(String url, Bitmap bitmap) {
??if (getBitmapToCache(url) == null) {
???mLruCache.put(url, bitmap);
??}
?}


?public Bitmap getBitmapToCache(String url) {
??return mLruCache.get(url);
?}


?private Handler handler = new Handler() {
??public void handleMessage(android.os.Message msg) {
???if (mImageView.getTag().equals(murl)) {
????mImageView.setImageBitmap((Bitmap) msg.obj);
???}
??};
?};


?/**
? * 使用多線程加載圖片
? *
? * @param image
? * @param url
? */
?public void ShowImageByThread(ImageView image, final String url) {
??mImageView = image;
??murl = url;
??new Thread() {
???@Override
???public void run() {
????super.run();
????Bitmap bitmap = getBitMapFromURL(url);
????Message message = Message.obtain();
????message.obj = bitmap;
????handler.sendMessage(message);
???}
??}.start();


?}


?/**
? * 使用httpUrlConnection下載Bitmap
? *
? * @param urlString
? * @return
? */
?public Bitmap getBitMapFromURL(String urlString) {
??Bitmap bitmap;
??InputStream is = null;
??try {
???URL url = new URL(urlString);
???HttpURLConnection connection = (HttpURLConnection) url
?????.openConnection();
???is = new BufferedInputStream(connection.getInputStream());
???bitmap = BitmapFactory.decodeStream(is);
???connection.disconnect();
???return bitmap;
??} catch (Exception e) {
???e.printStackTrace();
??} finally {
???try {
????is.close();
???} catch (IOException e) {
????e.printStackTrace();
???}
??}
??return null;
?}


?/**
? * 用來加載start到end的圖片
? *
? * @param Start
? * @param End
? */
?public void loadImages(int Start, int End) {
??for (int i = Start; i < End; i++) {
???String url = AlbumAdapte.URLS[i];
???Bitmap bitmap = getBitmapToCache(url);
???if (bitmap == null) {
????NewsAsyncTask Task = new NewsAsyncTask(url);
????Task.execute(url);
????mTask.add(Task);
???} else {
????ImageView imageView = (ImageView) mListView
??????.findViewWithTag(url);
???}
??}
?};


?/**
? * 使用異步任務加載Bitmap
? *
? * @param imageView
? * @param Url
? */
?public void showImageByAsyncTask(ImageView imageView, String Url) {
??Bitmap bitmap = getBitmapToCache(Url);
??// 在這里使用loadImages來加載圖片,bitmap為空時不再調(diào)用AsynTask而是加在一張默認圖片
??if (bitmap == null) {
???imageView.setImageResource(R.drawable.ic_launcher);
??} else {
???imageView.setImageBitmap(bitmap);
??}
??// if (bitmap == null) {
??// new NewsAsyncTask(Url).execute(Url);
??// } else {
??// imageView.setImageBitmap(bitmap);
??// }


?}


?private class NewsAsyncTask extends AsyncTask<String, Void, Bitmap> {
??// private ImageView mImageView;
??private String mUrl;


??public NewsAsyncTask(String mUrl) {
???// this.mImageView = mImageView;
???this.mUrl = mUrl;
??}


??@Override
??protected Bitmap doInBackground(String... params) {
???// 從網(wǎng)絡獲取圖片or添加緩存
???String url = params[0];
???// 從網(wǎng)絡中獲取中取出圖片
???Bitmap bitmap = getBitMapFromURL(url);
???if (bitmap != null) {
????addBitmapToCache(url, bitmap);
???}


???return bitmap;
??}


??@Override
??protected void onPostExecute(Bitmap result) {
???super.onPostExecute(result);
???/*
??? * if (mImageView.getTag().equals(mUrl)) {
??? * mImageView.setImageBitmap(result); }
??? */
???ImageView imageView = (ImageView) mListView.findViewWithTag(mUrl);
???if (imageView != null && result != null) {
????imageView.setImageBitmap(result);
???}
??}
?}


?public void cancelAllTasks() {
??if (mTask != null) {
???for (NewsAsyncTask task : mTask) {
????task.cancel(false);
???}
??}
?}
}

/////////////////////////////////////////////////////////////////////////////////////////////////




////////////////////////////////////////////////////////////////////////////////////////////////////

package com.example.mediaplayer;


import java.util.List;


import com.ximalaya.ting.android.opensdk.model.album.Album;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class AlbumAdapte extends BaseAdapter implements OnScrollListener{


?private List<Album> mList;
?private LayoutInflater mInflater;
?private lvImageLoader mImageLoad;
?private int mStart,mEnd;
?public static String[] URLS;
?private boolean mFirstIn;
?
?public AlbumAdapte(Context context, List<Album> mList,ListView listView){
??this.mList = mList;
??mFirstIn = true;
??mInflater = LayoutInflater.from(context);
??mImageLoad = new lvImageLoader(listView);
??URLS = new String[mList.size()];
??for (int i=0;i<mList.size();i++){
???URLS[i] = mList.get(i).getCoverUrlSmall();
??}
??listView.setOnScrollListener(this);
?}
?
?@Override
?public int getCount() {
??// TODO Auto-generated method stub
??return mList.size();
?}


?@Override
?public Object getItem(int arg0) {
??// TODO Auto-generated method stub
??return mList.get(arg0);
?}


?@Override
?public long getItemId(int arg0) {
??// TODO Auto-generated method stub
??return arg0;
?}


?@Override
?public View getView(int arg0, View convertView, ViewGroup arg2) {
??ViewHolder viewHolder = new ViewHolder();
??if (convertView == null){
???convertView = mInflater.inflate(R.layout.albuminformationitem, null);
???viewHolder.tvIcon = (ImageView) convertView.findViewById(R.id.lv_imageCoverUrlSmall);
???viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.lv_AlbumTitle);
???viewHolder.tvContent = (TextView) convertView.findViewById(R.id.lv_AlbumIntro);
???convertView.setTag(viewHolder);
??}else {
???viewHolder = (ViewHolder) convertView.getTag();
??}
??viewHolder.tvIcon.setImageResource(R.drawable.ic_launcher);
??String url = mList.get(arg0).getCoverUrlSmall();
??viewHolder.tvIcon.setTag(url);
//??new ImageLoad().showImageByThread(viewHolder.tvIcon, url);
??mImageLoad.showImageByAsyncTask(viewHolder.tvIcon, url);
??viewHolder.tvTitle.setText(mList.get(arg0).getAlbumTitle());
//??viewHolder.tvTitle.setText(mList.get(arg0).newsIconUrl);
??viewHolder.tvContent.setText(mList.get(arg0).getAlbumIntro());
??return convertView;
?}
?
?class ViewHolder {
??TextView tvTitle,tvContent;
??ImageView tvIcon;
?}


?@Override
?public void onScroll(AbsListView view, int firstVisiableItem, int visiableItemCount, int totalItem) {
??mStart = firstVisiableItem;
??mEnd = mStart + visiableItemCount;
//??首次加載調(diào)用
??if(mFirstIn&&visiableItemCount>0){
???mImageLoad.loadImages(mStart, mEnd);
???mFirstIn = false;
??}
?}


?@Override
?public void onScrollStateChanged(AbsListView view, int scrollState) {
??if(scrollState == SCROLL_STATE_IDLE){
//???加載可見性
???mImageLoad.loadImages(mStart, mEnd);
??} else {
//???停止所有的ansyncTask;
???mImageLoad.cancelAllTasks();
??}
?}


}


正在回答

舉報

0/150
提交
取消
Android必學-異步加載
  • 參與學習       50617    人
  • 解答問題       326    個

了解Android中的異步加載處理方法,這是面試問的最多的知識點

進入課程

為什么傳遞過去的圖片的URI如果有為空的時候程序會崩掉

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號