安卓中提供的这个两个方法都非常的好用实现的代码也非常简单
先上代码
package com.example.administrator.imageload;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import static com.example.administrator.imageload.R.id.img;
public class MainActivity extends AppCompatActivity {
private List<User> lists;
private ListView listview;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
lists= (List<User>) msg.obj;
// 适配
ViewBase adapter = new ViewBase();
listview.setAdapter(adapter);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview= (ListView) findViewById(R.id.listview);
lists=new ArrayList<>();
new Thread(){
@Override
public void run() {
super.run();
getData();
}
}.start();
}
//在这个方法来面写网络请求并且用ImageView来加载
private void getData() {
try {
String path="http://api.laifudao.com/open/tupian.json";
URL url = new URL(path);
HttpURLConnection urls= (HttpURLConnection) url.openConnection();
urls.connect();
if (urls.getResponseCode()==200){
InputStream in = urls.getInputStream();
int len=-1;
byte [] buffer=new byte[1024];
StringBuffer sb = new StringBuffer();
while ((len=in.read(buffer))!=-1){
sb.append(new String(buffer,0,len));
}
Log.e("Tag","GGGGGGGGG"+sb.toString());
Gson gson = new Gson();
//当拿到的解析数据是以数组结尾时
Type type = new TypeToken<ArrayList<User>>() {}.getType();
// 把集合里面的值给
ArrayList<User> list=gson.fromJson(sb.toString(), type);
Message msg=Message.obtain();
msg.what=1;
msg.obj=list;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}class ViewBase extends BaseAdapter{
@Override
public int getCount() {
return lists.size();
}
@Override
public Object getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
ViewHolder holder;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 创建默认的ImageLoader配置参数
ImageLoaderConfiguration con=ImageLoaderConfiguration.createDefault(MainActivity.this);
// 将configuration配置到imageloader中
ImageLoader imgs=ImageLoader.getInstance();
imgs.init(con);
// 这些就是最设置图片的基本设置 是否本地缓存 设置图片的格式 以及设置图片没加载之前的默认图片
DisplayImageOptions opp= new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.ARGB_8888)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.build();
if (convertView==null){
convertView=View.inflate(MainActivity.this,R.layout.list_zi,null);
holder=new ViewHolder();
holder.title= (TextView) convertView.findViewById(R.id.texts);
holder.img= (ImageView) convertView.findViewById(img);
holder.img1= (ImageView) convertView.findViewById(R.id.img1);
convertView.setTag(holder);
}else {
holder= (ViewHolder) convertView.getTag();
}
holder.title.setText(lists.get(position).getTitle());
// 这一步就是对图片的加载
imgs.displayImage(lists.get(position).getThumburl(),holder.img,opp);
// 如果是Glide只需要加一部
Glide.with(MainActivity.this).load(lists.get(position).getSourceurl()).into(holder.img1);
// 开始加载数据
return convertView;
}class ViewHolder{
TextView title;
ImageView img,img1;
}
}
}
其实用到imageLoader仅仅是
// 创建默认的ImageLoader配置参数
ImageLoaderConfiguration con=ImageLoaderConfiguration.createDefault(MainActivity.this);
// 将configuration配置到imageloader中
ImageLoader imgs=ImageLoader.getInstance();
imgs.init(con);
// 这些就是最设置图片的基本设置 是否本地缓存 设置图片的格式 以及设置图片没加载之前的默认图片
DisplayImageOptions opp= new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.ARGB_8888)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.build();
// 这一步就是对图片的加载
imgs.displayImage(lists.get(position).getThumburl(),holder.img,opp);
而glide更简单
Glide.with(MainActivity.this).load(lists.get(position).getSourceurl()).into(holder.img1);
要注意的是在导入Imageloader的支持库
在build.gradle文件夹下面导入支持库并同步一下
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
在mainifests里面增加权限
<uses-permission android:name="android.permission.INTERNET"/>
可以看见两种方式加载从网络请求来的图片都非常的简单实用