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

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

從第四章弄完后為什么我的圖片還是沒有加載出來??求解代碼出錯了嗎,也沒有報什么錯誤

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

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;

/**
?*?項目名:???NewsDemo
?*?包名:?????com.darrow.newsdemo
?*?文件名:???ImageLoader
?*?創(chuàng)建者:???Dw
?*?創(chuàng)建時間:?2017/3/11?0011?下午?12:23
?*?描述:?????處理圖片的加載
?*/

public?class?ImageLoader?{
????private?ImageView?mImageView;
????private?String?mUrl;
????//創(chuàng)建Caches
????private?LruCache<String,Bitmap>?mCaches;
????private?ListView?mListView;
????private?Set<NewsAsyncTask>?mTask;

????public?ImageLoader(ListView?listView){
????????mListView??=?listView;
????????mTask?=?new?HashSet<>();
????????//先獲取當(dāng)前應(yīng)用所可用的內(nèi)存大小
????????int?maxMemory?=?(int)?Runtime.getRuntime().maxMemory();
????????//設(shè)置所需要的緩存大小
????????int?cacheSize?=?maxMemory/4;
????????mCaches?=?new?LruCache<String,Bitmap>(cacheSize){
????????????//在每次加入內(nèi)存緩存的時候調(diào)用
????????????@Override
????????????protected?int?sizeOf(String?key,?Bitmap?value)?{
????????????????//返回bitmap的實際大小
????????????????return?value.getByteCount();
????????????}
????????};
????}

????//加入到緩存
????public?void?addBitmapToCache(String?url,Bitmap?bitmap){
????????//先判斷當(dāng)前緩存是否存在
????????if(getBitmapFromURL(url)?==?null){
????????????mCaches.put(url,bitmap);
????????}
????}
????//從緩存中獲取數(shù)據(jù)
????public?Bitmap?getBitmapFromCache(String?url){
????????return?mCaches.get(url);
????}

????private?Handler?mHandler?=?new?Handler(){
????????@Override
????????public?void?handleMessage(Message?msg)?{
????????????super.handleMessage(msg);
????????????//對身份認證進行判斷
????????????if?(mImageView.getTag().equals(mUrl))?{
????????????????mImageView.setImageBitmap((Bitmap)?msg.obj);
????????????}
????????}
????};

????//使用多線程方法加載圖片
????public?void?showImageByThread(ImageView?imageView,final?String?url){
????????mImageView?=?imageView;
????????mUrl?=?url;
????????new?Thread(){
????????????@Override
????????????public?void?run()?{
????????????????super.run();
????????????????Bitmap?bitmap?=?getBitmapFromURL(url);
????????????????//發(fā)送message給Handler處理
????????????????//通過這種方式可以使用message已提取到的消息,從而提高效率
????????????????Message?message?=?Message.obtain();
????????????????message.obj?=?bitmap;
????????????????mHandler.sendMessage(message);
????????????}
????????}.start();
????}

????//通過url轉(zhuǎn)化成bitmap對象
????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();
????????????//添加一個模擬網(wǎng)絡(luò)加載慢的異常。
????????????//Thread.sleep(1000);
????????????is.close();
????????????return?bitmap;
????????}?catch?(java.io.IOException?e)?{
????????????e.printStackTrace();
????????}?finally?{
????????????//將InputStream釋放
????????????try?{
????????????????is.close();
????????????}catch?(IOException?e)?{
????????????????e.printStackTrace();
????????????}
????????}
????????return?null;
????}

????//使用AsyncTask方式加載圖片
????public?void?showImageByAsyncTask(ImageView?imageView,String?url?){
????????//從緩存中取出圖片
????????Bitmap?bitmap?=?getBitmapFromCache(url);
????????//判斷緩存,如果沒有那么必須去下載
????????if?(bitmap?==?null){
????????????imageView.setImageResource(R.mipmap.ic_launcher);
????????}else{
????????????imageView.setImageBitmap(bitmap);
????????}
????}

????//用來加載從start到end的所有圖片
????public?void?loadImages(int?start,int?end){
????????for?(int?i=?start;i<end;i++){
????????????String?url?=?NewsAdapter.URLS[i];
????????????//從緩存中取出圖片
????????????Bitmap?bitmap?=?getBitmapFromCache(url);
????????????//判斷緩存,如果沒有那么必須去下載
????????????if?(bitmap?==?null){
????????????????NewsAsyncTask?task?=?new?NewsAsyncTask(url);
????????????????task.execute(url);
????????????????mTask.add(task);
????????????}else{
????????????????ImageView?imageView?=?(ImageView)?mListView.findViewWithTag(url);
????????????????imageView.setImageBitmap(bitmap);
????????????}
????????}
????}

????//取消所有任務(wù)
????public?void?cancelAllTasks()?{
????????if?(mTask?!=?null){
????????????for?(NewsAsyncTask?task?:?mTask){
????????????????task.cancel(false);
????????????}
????????}
????}

????private?class?NewsAsyncTask?extends?AsyncTask<String,Void,Bitmap>{
????????//?private?ImageView?mImageView;
????????private?String?mUrl;
????????public?NewsAsyncTask(String?url){
???????????//?mImageView?=?imageView;
????????????mUrl?=?url;
????????}

????????@Override
????????protected?Bitmap?doInBackground(String...?params)?{
????????????String?url?=?params[0];
????????????//從網(wǎng)絡(luò)上獲取圖片
????????????Bitmap?bitmap?=?getBitmapFromCache(url);
????????????if(bitmap?!=?null){
????????????????//下載完圖片后應(yīng)該保存到緩存中,以便下次使用
????????????????addBitmapToCache(url,bitmap);
????????????}
????????????return?bitmap;
????????}

????????@Override
????????protected?void?onPostExecute(Bitmap?bitmap)?{
????????????super.onPostExecute(bitmap);
????????????ImageView?imageView?=?(ImageView)?mListView.findViewWithTag(mUrl);
????????????if?(imageView?!=?null?&&?bitmap?!=?null)?{
????????????????imageView.setImageBitmap(bitmap);
????????????}
????????????mTask.remove(this);
????????}
????}


}


正在回答

2 回答

你的代碼中is.close(),執(zhí)行了2次,這個是小問題,應(yīng)該不影響加載圖片;

別的沒看出來,這個類是沒問題的

0 回復(fù) 有任何疑惑可以回復(fù)我~

你的代碼貌似沒發(fā)現(xiàn)啥錯誤,但我這與這個demo就出現(xiàn)了以下幾個問題:

1、在首次加載時,執(zhí)行完后就忘記了設(shè)置:mFirstIn=false;

2、模擬器中,滑動加載圖片是要用鼠標(biāo)來滑動,不能用鼠標(biāo)的滾輪來滾動;

3、你的代碼中is.close(),執(zhí)行了2次,這個是小問題,應(yīng)該不影響加載圖片;

由于NewsAdapter這個類看不到源碼,所以暫時只能回答這些!

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Android必學(xué)-異步加載
  • 參與學(xué)習(xí)       50618    人
  • 解答問題       326    個

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

進入課程

從第四章弄完后為什么我的圖片還是沒有加載出來??求解代碼出錯了嗎,也沒有報什么錯誤

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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