网络请求 实现xlistview 以及 imageloder不一样的方法

package com.bwei.xlistview.activity;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;


import com.bwei.xlistview.R;
import com.bwei.xlistview.adapter.MyAdapter;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;


import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import cz.msebera.android.httpclient.Header;
import xlistview.bawei.com.xlistviewlibrary.XListView;


public class MainActivity extends AppCompatActivity {




  //  private String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page=1";
    private int page=1;
    private XListView xlv;
    private JSONArray jsonArray = null;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    //停止下拉刷新
                    xlv.stopRefresh();
                    break;
                case 1:
                    //停止上拉加载
                    xlv.stopLoadMore();


                    break;
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        xlv = (XListView) findViewById(R.id.xlv);
        //设置下拉和上拉监听
        xlv.setPullRefreshEnable(true);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();
                page=1;
                getServerData();
                handler.sendEmptyMessageDelayed(0,2000);
               /* handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        xlv.stopRefresh();
                    }
                },2000);*/




            }


            @Override
            public void onLoadMore() {
                Toast.makeText(MainActivity.this, "上拉加载", Toast.LENGTH_SHORT).show();
                page++;
                getServerData();
                handler.sendEmptyMessageDelayed(1,2000);
            }
        });
        //默认获取网络数据
        getServerData();


    }


    private void getServerData() {
        String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page="+page;
        //创建网络请求
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(this, url, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {


            }


            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                Log.i("xxx", responseString);
                try {
                    JSONObject jsonObject = new JSONObject(responseString);
                    JSONArray datas = jsonObject.getJSONArray("data");
                    //page为1的时候创建集合
                    if (page==1){
                        jsonArray = new JSONArray();
                    }
                    //遍历累加
                    for (int i =0;i<datas.length();i++){
                        jsonArray.put(datas.get(i));
                    }


                       MyAdapter    adapter = new MyAdapter(MainActivity.this, jsonArray);
                       xlv.setAdapter(adapter);






                } catch (JSONException e) {
                    e.printStackTrace();
                }




            }
        });
    }
}


package com.bwei.xlistview.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bwei.xlistview.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * 1. 类的用途
 * 2. @author forever
 * 3. @date 2018/7/12 17:40
 */


public class MyAdapter extends BaseAdapter {
    Context context;
    JSONArray datas;
    private final int TYPE_0 = 0;
    private final int TYPE_1 = 1;


    public MyAdapter(Context context, JSONArray datas) {
        this.context = context;
        this.datas = datas;
    }

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

    @Override
    public Object getItem(int position) {
        try {
            return datas.get(position);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

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

    //视图类型数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    //条目视图类型
    @Override
    public int getItemViewType(int position) {
        int p = position % 2;
        if (p == 0) {
            return TYPE_0;
        } else {
            return TYPE_1;
        }

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        int type = getItemViewType(position);
        if (convertView == null) {
            if (type==0){
                convertView = View.inflate(context, R.layout.item, null);
                holder = new ViewHolder();
                holder.iv = convertView.findViewById(R.id.iv);
                holder.tv_title = convertView.findViewById(R.id.tv_title);
                convertView.setTag(holder);
            }else {
                convertView = View.inflate(context, R.layout.item, null);
                holder = new ViewHolder();
                holder.tv_title = convertView.findViewById(R.id.tv_title);
                convertView.setTag(holder);
            }

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        if (type==0){
            try {
                JSONObject jsonObject = datas.getJSONObject(position);
                String title = jsonObject.getString("title");
                String headImg = jsonObject.getString("headImg");
                holder.tv_title.setText(title);
                //  DisplayImageOptions options = DisplayImageOptions.createSimple();

               /* DisplayImageOptions options = new DisplayImageOptions.Builder()
                        // 设置图片在下载期间显示的图片
                        .showImageOnLoading(R.mipmap.ic_launcher)
                        // 设置图片Uri为空或是错误的时候显示的图片
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        // 设置图片加载/解码过程中错误时候显示的图片
                        .showImageOnFail(R.mipmap.ic_launcher)
                        // 设置下载的图片是否缓存在内存中
                        .cacheInMemory(true)
                        // 设置下载的图片是否缓存在SD卡中
                        .cacheOnDisc(true)
                        // 是否考虑JPEG图像EXIF参数(旋转,翻转)
                        .considerExifParams(true)
                        // 设置图片以如何的编码方式显示
                        .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
                        // 设置图片的解码类型//
                        .bitmapConfig(Bitmap.Config.RGB_565)
                        // 设置图片的解码配置
                        // .decodingOptions(options)
                        // .delayBeforeLoading(int delayInMillis)//int
                        // delayInMillis为你设置的下载前的延迟时间
                        // 设置图片加入缓存前,对bitmap进行设置
                        // .preProcessor(BitmapProcessor preProcessor)
                        // 设置图片在下载前是否重置,复位
                        .resetViewBeforeLoading(true)
                        // 是否设置为圆角,弧度为多少
                        .displayer(new RoundedBitmapDisplayer(80))
                        // 是否图片加载好后渐入的动画时间
                        //  .displayer(new FadeInBitmapDisplayer(2000))
                        // 构建完成
                        .build();*/
                //使用图片加载框架加载图片
                ImageLoader.getInstance().displayImage(headImg, holder.iv);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }else {
            try {
                JSONObject     jsonObject = datas.getJSONObject(position);
                String title = jsonObject.getString("title");
                holder.tv_title.setText(title);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }


        return convertView;
    }

    private class ViewHolder {
        ImageView iv;
        TextView tv_title;
    }
}
package com.bwei.xlistview.app;

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;

/**
 * 1. 类的用途
 * 2. @author forever
 * 3. @date 2018/7/13 10:48
 */


public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //进行全局配置,并初始化
        //  ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);

        //磁盘缓存路径
        File diskCache = StorageUtils.getCacheDirectory(this);
       // File diskCache = new File(Environment.getExternalStorageDirectory(),"Android");
                ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                // 设置内存图片的宽高
                .memoryCacheExtraOptions(480, 800)
                // default = device screen dimensions
                // 缓存到磁盘中的图片宽高
                .diskCacheExtraOptions(480, 800, null)
                // .taskExecutor(null)
                // .taskExecutorForCachedImages()
                .threadPoolSize(3)
                // default 线程优先级
                .threadPriority(Thread.NORM_PRIORITY - 2)
                // default
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                // // default设置在内存中缓存图像的多种尺寸
                //加载同一URL图片时,imageView从小变大时,从内存缓存中加载
                .denyCacheImageMultipleSizesInMemory()
                // 超过设定的缓存大小时,内存缓存的清除机制
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                // 内存的一个大小
                .memoryCacheSize(2 * 1024 * 1024)
                .memoryCacheSizePercentage(13)
                // default 将图片信息缓存到该路径下
                .diskCache(new UnlimitedDiscCache(diskCache))
                // default 磁盘缓存的大小
                .diskCacheSize(50 * 1024 * 1024)
                // 磁盘缓存文件的个数
                .diskCacheFileCount(100)
                //磁盘缓存的文件名的命名方式//一般使用默认值 (获取文件名称的hashcode然后转换成字符串)或MD5 new Md5FileNameGenerator()源文件的名称同过md5加密后保存
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                // 设置默认的图片加载
                .imageDownloader(
                        new BaseImageDownloader(getApplicationContext())) // default
                // 使用默认的图片解析器
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs().build();

        ImageLoader.getInstance().init(configuration);

    }
}

猜你喜欢

转载自blog.csdn.net/nideyida1/article/details/81057263
今日推荐