ImageLoader簡單使用

来源:http://www.cnblogs.com/wangfengdange/archive/2016/01/12/5124924.html
-Advertisement-
Play Games

如圖是效果圖 我從介面拉出來的數據然後將它們展示在界面上1 先定義佈局 我定義了MyGridView來展示商品2 導入jar包universal-image-loader-1.8.6-with-sources 用來展示商品使用 在使用 ImageLoader應加入 ImageLoader.ge...


如圖是效果圖

                   

我從介面拉出來的數據然後將它們展示在界面上

1   先定義佈局 我定義了MyGridView來展示商品

2   導入jar包universal-image-loader-1.8.6-with-sources 用來展示商品使用    在使用 ImageLoader應加入

     ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));不然會報

     java.lang.IllegalStateException: ImageLoader must be init with configuration before using字面意思是在使用前要初始化

3  定義適配器在getView中展示產品,不過我在展示的時候發現第一條數據總是在請求數據如下圖,重覆網址載入太慢也消耗伺服器(也不知道是我哪裡寫錯了第0條在重覆請求 在網上我也沒找到方法)

   所以我定義了一個 View arrView[]有數據的時候就不許再請求了

                        

4 開啟子線程 在子線程中載入數據,在handler中解析數據並將其展示在界面上

主要的代碼如下

佈局代碼

package com.demo.content;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

public class MyGridView extends GridView {
    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}
View Code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#eee"
            android:orientation="vertical" >

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                android:textColor="#000" />

            <View
                android:layout_width="match_parent"
                android:layout_height="5dp"
                android:background="@drawable/btn_normal" />

            <com.demo.content.MyGridView
                android:id="@+id/gg_mygridview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:horizontalSpacing="7dp"
                android:numColumns="2"
                android:verticalSpacing="7dp" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>
View Code
  1 package com.demo.activity;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import org.json.JSONArray;
  6 import org.json.JSONObject;
  7 import com.demo.content.MyGridView;
  8 import com.demo.entity.Product;
  9 import com.demo.pullrefresh.R;
 10 import com.demo.util.GetThread;
 11 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 12 import com.nostra13.universalimageloader.core.ImageLoader;
 13 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
 14 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 15 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
 16 import android.annotation.SuppressLint;
 17 import android.app.Activity;
 18 import android.graphics.Bitmap;
 19 import android.os.Bundle;
 20 import android.os.Handler;
 21 import android.util.Log;
 22 import android.view.View;
 23 import android.view.ViewGroup;
 24 import android.widget.BaseAdapter;
 25 import android.widget.ImageView;
 26 import android.widget.TextView;
 27 
 28 public class MyMainActivity extends Activity {
 29     // 定義的佈局
 30     private MyGridView myGridView;
 31     private DisplayImageOptions options;
 32     // 產品
 33     private List<Product> products;
 34     // 地址
 35     private String url = ""
 36             + "Product/GetProductsByProType/12000000/20";
 37 
 38     @Override
 39     protected void onCreate(Bundle arg0) {
 40         // TODO Auto-generated method stub
 41         super.onCreate(arg0);
 42         setContentView(R.layout.mymainactivity);
 43         options = new DisplayImageOptions.Builder()
 44                 .showImageForEmptyUri(R.drawable.ic_empty)
 45                 // image連接地址為空時
 46                 .showImageOnFail(R.drawable.ic_error)
 47                 // image載入失敗
 48                 .resetViewBeforeLoading(true).cacheOnDisc(true)
 49                 .imageScaleType(ImageScaleType.EXACTLY)
 50                 .bitmapConfig(Bitmap.Config.RGB_565)
 51                 .displayer(new FadeInBitmapDisplayer(300))// 設置用戶載入圖片task(這裡是漸現圖片顯示)
 52                 .build();
 53         // 創建預設的ImageLoader的參數 不加回報java.lang.IllegalStateException
 54         // 但不是每次用到ImageLoader都要加
 55         ImageLoader.getInstance().init(
 56                 ImageLoaderConfiguration.createDefault(this));
 57         myGridView = (MyGridView) findViewById(R.id.gg_mygridview);
 58         // 開啟線程
 59         new GetThread(url, handler).start();
 60     }
 61 
 62     @SuppressLint("HandlerLeak")
 63     private Handler handler = new Handler() {
 64         public void handleMessage(android.os.Message msg) {
 65             switch (msg.what) {
 66             case GetThread.SUCCESS:
 67                 String jsonString = (String) msg.obj;
 68                 // 用JSON來解析數據
 69                 products = getJsonProducts(jsonString);
 70                 Log.d("jiejie", "DDDDDDD" + products);
 71                 // 創建個適配器
 72                 Adapter adapter = new Adapter();
 73                 myGridView.setAdapter(adapter);
 74                 break;
 75 
 76             default:
 77                 break;
 78             }
 79         };
 80     };
 81 
 82     protected List<Product> getJsonProducts(String jsonString) {
 83         List<Product> resultTempList = new ArrayList<Product>();
 84         try {
 85             JSONArray array = new JSONArray(jsonString);
 86             for (int i = 0; i < array.length(); i++) {
 87                 Product temProductSimple = new Product();
 88                 JSONObject object = array.getJSONObject(i);
 89                 temProductSimple.setId(object.getInt("id"));
 90                 temProductSimple.setProType(object.getInt("ProType"));
 91                 temProductSimple.setProOrder(object.getInt("ProOrder"));
 92                 temProductSimple.setAddTime(object.getString("AddTime"));
 93                 temProductSimple.setTitle(object.getString("Title"));
 94                 temProductSimple.setSmallPic(object.getString("SmallPic"));
 95                 temProductSimple.setPrice(object.getDouble("Price"));
 96                 temProductSimple.setSalePrice(object.getDouble("SalePrice"));
 97                 temProductSimple.setZhishubi(object.getString("Zhishubi"));
 98                 temProductSimple.setProNo(object.getString("ProNo"));
 99                 temProductSimple.setContens(object.getString("Contens"));
100                 temProductSimple.setBuyCount(object.getInt("BuyCount"));
101                 temProductSimple.setReadCount(object.getInt("ReadCount"));
102                 temProductSimple.setProImg(object.getString("ProImg"));
103                 temProductSimple.setShopFlag(object.getString("ShopFlag"));
104                 temProductSimple.setBrandId(object.getInt("BrandId"));
105                 temProductSimple.setStartTime(object.getString("StartTime"));
106                 if (object.get("Score") == null
107                         || object.get("Score").toString() == "null") {
108                     temProductSimple.setScore(0);
109                 } else {
110 
111                     temProductSimple.setScore(object.getInt("Score"));
112                 }
113 
114                 temProductSimple.setProductOrigin(object
115                         .getString("ProductOrigin"));
116                 if (object.get("kucun").toString() == "null") {
117                     temProductSimple.setKucun(0);
118 
119                 } else {
120                     temProductSimple.setKucun(object.getInt("kucun"));
121                 }
122 
123                 resultTempList.add(temProductSimple);
124             }
125         } catch (Exception e) {
126             // TODO: handle exception
127             e.printStackTrace();
128             System.out.println(e.toString());
129 
130         }
131         return resultTempList;
132     }
133 
134     private View arrView[];
135 
136     private class Adapter extends BaseAdapter {
137 
138         @Override
139         public int getCount() {
140             // TODO Auto-generated method stub
141             // return products.size();
142             if (arrView == null) {
143                 arrView = new View[products.size()];
144             }
145             return products.size();
146         }
147 
148         @Override
149         public Object getItem(int arg0) {
150             // TODO Auto-generated method stub
151             return products.get(arg0);
152         }
153 
154         @Override
155         public long getItemId(int arg0) {
156             // TODO Auto-generated method stub
157             return arg0;
158         }
159 
160         @Override
161         public View getView(int arg0, View arg1, ViewGroup arg2) {
162             if (arrView[arg0] == null) {
163                 Product info = products.get(arg0);
164                 Holder holder = null;
165                 if (null == arg1) {
166                     holder = new Holder();
167 
168                     arg1 = View.inflate(MyMainActivity.this,
169                             R.layout.product_item, null);
170                     holder.product_cost = (TextView) arg1
171                             .findViewById(R.id.product_cost);
172                     holder.product_title = (TextView) arg1
173                             .findViewById(R.id.product_title);
174                     holder.product_img = (ImageView) arg1
175                             .findViewById(R.id.product_img);
176                     holder.buy_count = (TextView) arg1
177                             .findViewById(R.id.buy_count);
178                     arg1.setTag(holder);
179                 } else {
180                     holder = (Holder) arg1.getTag();
181                 }
182                 holder.product_cost.setText(products.get(arg0).getSalePrice()
183                         + "");
184                 holder.product_title.setText(products.get(arg0).getTitle());
185                 holder.buy_count.setText(products.get(arg0).getBuyCount() + "");
186                 String urlString = "http://**/UploadImages/ProductImages/"
187                         + products.get(arg0).getSmallPic();
188 
189                 Log.d("jiejie", "dddddd___   " + arg0);
190                 Log.d("jiejie", "_________" + info.getTitle());
191                 Log.d("jiejie", "ProducteGridAdapter--" + urlString);
192                 ImageLoader.getInstance().displayImage(urlString,
193                         holder.product_img, options);
194 
195                 arrView[arg0] = arg1;
196             }
197             return arrView[arg0];
198             // return arg1;
199 
200         }
201 
202     }
203 
204     static class Holder {
205         ImageView product_img;
206         TextView product_title;
207         TextView product_cost;
208         TextView buy_count;
209     }
210 }
package com.demo.util;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class GetThread extends Thread {
    public static final int SUCCESS = 10, FAIL = -11;
    private String url;
    private Handler handler;

    public GetThread(String url, Handler handler) {
        this.url = url;
        this.handler = handler;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse httpResponse = httpClient.execute(httpGet);
            Message msg = Message.obtain();
            Log.v("asdf", httpResponse.getStatusLine().getStatusCode()
                    + "返回碼     " + url);
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String jsonString = EntityUtils.toString(httpResponse
                        .getEntity());
                msg.what = SUCCESS;
                msg.obj = jsonString;
                handler.sendMessage(msg);
            } else {
                msg.what = FAIL;
                handler.sendMessage(msg);
            }

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Beaglebone Black開發板安裝驅動Beaglebone Black開發板安裝驅動Beaglebone Black開發板安裝驅動
  • apache ab test使用 apache ab test使用 單獨安裝ab和htpasswd轉載自:http://www.cnblogs.com/super-d2/p/3831155.html#tophttp://blog.chinaunix.net/uid-20382003-id-30321...
  • 背景客戶的SQL Server實例上有多個廠商的資料庫,每個資料庫由各自的進行廠進行商維護,為了限定不同廠商的維護人員只能訪問自己的資料庫,現需要給各個廠商限定許可權,讓他們登錄SQL Server只能看到授權的資料庫而無法看到其他資料庫。解決方案1.先給不同的廠商創建不同的登錄名(如下以一個廠商為例...
  • 本文目錄列表:1、SQL Server小時時間粒度2、SQL Server分鐘時間粒度3、總結語4、參考清單列表SQL Server小時時間粒度 這裡說的時間粒度是指帶有小時時間部分的日期時間,這個日期時間精確度是小時的。提供將帶小時的日期時間和整數相互轉換的功能,和以前日、周、旬、季、年那樣。 ....
  • 1.text:設置標簽顯示文本。2.attributedText:設置標簽屬性文本。NSString *text = @"first"; NSMutableAttributedString *textLabelStr = [[NSMutableAttributedString alloc] ini....
  • 現象:一個項目,之前做的好好的,後來打包,生成ipa文件之後,再運行的時候,NSLog的日誌都不輸出了。解決方案:在模式選擇裡面,裡面包含:“Debug”、“Release”兩種,設置“Debug”原因:在開發過程中,我們經常需要用到NSLog輸出一些信息,甚至有的開發過程,必須在控制台查看輸出,有...
  • Version 和 Build 版本號開發者都知道,無論是對於 iOS 和 Android 的應用,每個應用都有兩個不同的版本號。分別是:VersionBuild(在 Android 上叫 Version Code)Version,也就是我們通常說的版本號, 是應用向用戶宣傳時候用到的標識,例如:1...
  • 0.先在微信開放平臺註冊創建應用地址https://open.weixin.qq.com在管理中心創建應用提交資料,獲取審核 註意Bundle ID 要填寫正確,不能隨便填審核完成之後獲取微信的AppID 、AppSecret 審核大概一周時間1.微信SDK下載地址 https://open.wei...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...