ImageLoader获取网络数据图片

package animtest.com.example.e531.imageloader_demo2;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;

import com.google.gson.Gson;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private MyAdapter adapter;
private List<NewsResult.NewslistEntity> datas = new ArrayList<>();
private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.lv);

    //获取列表数据
    new MyTask().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1");



}

class MyTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        String result = "";
        try {
            URL url = new URL(params[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            if(connection.getResponseCode()==200){
                InputStream inputStream=connection.getInputStream();
                result=StreamToString.streamToStr(inputStream,"utf-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    @Override
    protected void onPostExecute(String s) {
        //1.gson解析
        Gson gson = new Gson();
        NewsResult result = gson.fromJson(s, NewsResult.class);
        //2.要显示的数据
        datas = result.getNewslist();
        //3.设置适配器
        setAdapter();
    }
}

/**
 * 设备适配器
 */
private void setAdapter() {
    if (adapter == null) {
        adapter = new MyAdapter(this, datas);
        listView.setAdapter(adapter);
    } else {
        adapter.notifyDataSetChanged();
    }
}

}

/**
* 以及ImageLoader在适配器中的调用
*
*/
package animtest.com.example.e531.imageloader_demo2;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

import java.util.List;

/**
* Created by e531 on 2017/11/3.
*/
public class MyAdapter extends BaseAdapter {

private Context context;
private List<NewsResult.NewslistEntity> datas;

//2.设置显示图片的类
private DisplayImageOptions options;

public MyAdapter(Context context, List<NewsResult.NewslistEntity> datas) {
    this.context = context;
    this.datas = datas;

    options=new DisplayImageOptions.Builder()
            .cacheInMemory(true)//使用内存缓存
            .cacheOnDisk(true)//使用磁盘缓存
            .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
            .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
            .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
            .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式
            .displayer(new RoundedBitmapDisplayer(20))//设置圆角图片
            .build();
}

@Override
public int getCount() {
    return datas.size();
}

@Override
public Object getItem(int position) {
    return datas.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView==null){
        holder=new ViewHolder();
        convertView=View.inflate(context,R.layout.item,null);
        holder.img=(ImageView) convertView.findViewById(R.id.img);
        holder.tvTitle=(TextView) convertView.findViewById(R.id.tvtitle);
        convertView.setTag(holder);

    }else{
        holder=(ViewHolder) convertView.getTag();
    }

    holder.tvTitle.setText(datas.get(position).getTitle());

    //获取图片路径
    String picPath=datas.get(position).getPicUrl();

    //使用ImageLoader框架
    ImageLoader.getInstance().displayImage(picPath,holder.img,options);

    return convertView;
}

class ViewHolder{
    ImageView img;
    TextView tvTitle;
}

}
/**
* 接下来是一个ImageLoader图片适配的
* 以及ImageLoader进行框架初使化操作-全局配置
*/
package animtest.com.example.e531.imageloader_demo2;

import android.app.Application;
import android.os.Environment;
import android.util.Log;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.io.File;

/**
* Created by e531 on 2017/11/7.
*/
public class MyApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    Log.d("zzz","程序入口点");

    //sd卡上缓存目录-android指定的缓存路径 android/data/<package>/cache
    File cachefile=getExternalCacheDir();
    //自定义的缓存路径

// File cachefile=new File(Environment.getExternalStorageDirectory().getPath()+”/abc/a”);

    //进行框架初使化操作-全局配置
    ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
            .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽
            .threadPoolSize(2)//线程池的数量
            .threadPriority(4)
            .memoryCacheSize(5*1024*1024)//设置内存缓存区大小
            .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小
            .diskCache(new UnlimitedDiscCache(cachefile))//自定义磁盘缓存目录
            .writeDebugLogs()//打印日志内容
            .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理
            .build();

    ImageLoader.getInstance().init(configuration);




}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值