imageloader的使用

本文介绍了一个基于Android平台的新闻应用程序实现方式,包括如何通过网络请求获取新闻数据、使用Handler进行消息传递、自定义BaseAdapter展示数据以及利用ImageLoader加载图片等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity {

    private String path="http://zkread.com/htnewsroom/v2.0/mobileapp/user-0/categories/articles?itemType=recommendation&itemName=%25E6%258E%25A8%25E8%258D%2590&itemId=-1&page=1&size=20&firstId=1338557";
    private ListView mlistview;
    private List<Data.DataBean.ArticleListBean> mlist;
    private Handler mHandler=new Handler(){
            @Override
            public void   handleMessage(Message msg) {
                String result=msg.obj.toString();
                Gson gson=new Gson();
                Data data = gson.fromJson(result, Data.class);
                mlist.addAll(data.getData().getArticleList());
                myBaseAdapter.notifyDataSetChanged();
            }
        };
    private MyBaseAdapter myBaseAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mlistview= (ListView) findViewById(R.id.list);
        mlist = new ArrayList<>();
        myBaseAdapter = new MyBaseAdapter(mlist, MainActivity.this);
        mlistview.setAdapter(myBaseAdapter);
        dataLoad();

    }

    private void dataLoad() {
     new  Thread(){
         @Override
         public void run() {
             super.run();
             String url=NetUtils.getUrlConnect(path);
             Message msg=Message.obtain();
             msg.what=0;
             msg.obj=url;
             mHandler.sendMessage(msg);
         }





     }.start();
    }
}


public class MyBaseAdapter extends BaseAdapter {
    List<Data.DataBean.ArticleListBean> mlist;
    Context context;
    private final DisplayImageOptions options;
    private final ImageLoader imageLoader;
    //1 初始化ImageLoader
    public MyBaseAdapter(List<Data.DataBean.ArticleListBean> mlist, Context context) {
        this.context = context;
        this.mlist = mlist;
        //初始化ImageLoaderConfiguration对象 传一个上下文
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);
        // 放在构造器中初始化
        imageLoader = ImageLoader.getInstance();
        //初始化的方法 必须写的不写会报错 传一个configuration对象
        imageLoader.init(configuration);
        //下面是对imageloader 的配置
        //拿到DisplayImageOptions.Builder()对象进行配置
        options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                .showImageOnLoading(R.mipmap.ic_launcher)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .showImageOnFail(R.mipmap.ic_launcher)
                .build();
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewsHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item, null);
            holder = new ViewsHolder();
            holder.textView = (TextView) convertView.findViewById(R.id.tv);
            holder.image = (ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (ViewsHolder) convertView.getTag();
        }
        Data.DataBean.ArticleListBean bean = mlist.get(position);
        holder.textView.setText(bean.getImgSrc());
        //判断获得的图片不能为空 或者是以 http开头
//        if(bean.getImgSrc()!=null||bean.getImgSrc().startsWith("http")){
//           //赋值
//            imageLoader.displayImage(bean.getImgSrc(),holder.image);
//        }
        imageLoader.displayImage(bean.getImgSrc(), holder.image, options);
        return convertView;
    }
    class ViewsHolder {
        ImageView image;
        TextView textView;
    }
}

public class NetUtils {
     public static String postUrlConnect(String urlPath, Map<String,Object> map){
                      StringBuffer sbRequest =new StringBuffer();
                       if(map!=null&&map.size()>0){
                           for (String key:map.keySet()){
                               sbRequest.append(key+"="+map.get(key)+"&");
                           }
                       }
                       String request = sbRequest.substring(0,sbRequest.length()-1);
                       try {
                           //创建URL
                           URL url = new URL(urlPath);
                           //由URL的openConnection方法得到一个HttpURLConnection(需要强转)
                           HttpURLConnection httpURLConnection =
                                   (HttpURLConnection) url.openConnection();
                           //设置post提交
                           httpURLConnection.setRequestMethod("POST");
                           //设置超时时间
                           httpURLConnection.setConnectTimeout(30000);
                           httpURLConnection.setReadTimeout(30000);

                           httpURLConnection.setDoInput(true);
                           httpURLConnection.setDoOutput(true);

                           //把请求正文通过OutputStream发出去
                           OutputStream os =httpURLConnection.getOutputStream();
                           os.write(request.getBytes());
                           os.flush();

                           //判断响应码  200 代表成功
                           if(httpURLConnection.getResponseCode()==200){
                               //由HttpURLConnection拿到输入流
                               InputStream in=httpURLConnection.getInputStream();
                               StringBuffer sb=new StringBuffer();
                               //根据输入流做一些IO操作
                               byte [] buff =new byte[1024];
                               int len=-1;
                               while((len=in.read(buff))!=-1){
                                   sb.append(new String(buff,0,len,"utf-8"));
                               }

                               in.close();
                               os.close();
                               httpURLConnection.disconnect();
                               return  sb.toString();
                           }else{
                               return null;
                           }

                       }catch (Exception e){
                           Log.e("post","code:"+e.getMessage());
                           return null;
                       }
                   }

                   /**
                    * HttpURLConnection的get请求
                    * @param urlPath
                    * @return
                    */
                   public static String getUrlConnect(String urlPath){

                       try {
                           //创建URL
                           URL url = new URL(urlPath);
                           //由URL的openConnection方法得到一个HttpURLConnection(需要强转)
                           HttpURLConnection httpURLConnection =
                                   (HttpURLConnection) url.openConnection();
                           //设置连接
                           httpURLConnection.connect();
                           //判断响应码  200 代表成功
                           if(httpURLConnection.getResponseCode()==200){
                               //由HttpURLConnection拿到输入流
                               InputStream in=httpURLConnection.getInputStream();
                               StringBuffer sb=new StringBuffer();
                               //根据输入流做一些IO操作
                               byte [] buff =new byte[1024];
                               int len=-1;
                               while((len=in.read(buff))!=-1){
                                   sb.append(new String(buff,0,len,"utf-8"));
                               }
                               in.close();
                               httpURLConnection.disconnect();
                               return  sb.toString();
                           }else{
                               return null;
                           }
                       } catch (Exception e) {
                           e.printStackTrace();
                       }
                       return null;
                   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值