多条目加载 展示

package zhanghaijiao.bawei.com.httpget_demo;


import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;


import com.google.gson.Gson;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

//第一个MainActivity
public class MainActivity extends AppCompatActivity {


    private ListView listView;


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


        MyTask myTask=new MyTask();
        myTask.execute("http://api.tianapi.com/huabian/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10");


    }


    class MyTask extends AsyncTask<String,Void,String>{


        @Override
        protected String doInBackground(String... strings) {


            SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());
            //1.创建一个HttpClient对象--添加apha依赖库
            HttpClient httpClient=new DefaultHttpClient();
            //2.确定请求方式
            HttpGet httpGet=new HttpGet(strings[0]);
            //3.执行请求
            try {
                HttpResponse response = httpClient.execute(httpGet);
                //4.判断响应码
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode==200){
                    //5.获取数据
                    HttpEntity entity = response.getEntity();
                    //将实体对象转换成String字符串
                    String s = EntityUtils.toString(entity);
                    return  s;


                }}catch (Exception ex){
                ex.printStackTrace();
            }














            return null;
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);


            if(s!=null){
                Log.d("zzz","---"+s);
                //解析,显示
                Gson gson=new Gson();
                ResultData resultData = gson.fromJson(s, ResultData.class);


                MyAdapter adapter=new MyAdapter(MainActivity.this,resultData.getNewslist());
                listView.setAdapter(adapter);
            }




        }


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
    }

}

//适配器 外部

package zhanghaijiao.bawei.com.httpget_demo;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
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.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;


import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;


/**
 * Created by jane on 2017/12/26.
 */


public class MyAdapter extends BaseAdapter {




    public Context context;
    public List<ResultData.NewslistBean> data;
    private final DisplayImageOptions options;


    //定义类型的int  int值必须 小于 item类型的数量,否则会报数组越界的error
    private final int ITEM_TITLE=0;//只有文字无图的类型
    private final int ITEM_IMAGE=1;//有图的类型






    //alt+insert
    public MyAdapter(Context context, List<ResultData.NewslistBean> data) {
        this.context = context;
        this.data = data;






        //2.需要创建DisplayImageOption类 两种 1,使用默认设置 2.自定义设置
        //使用内存缓存
//使用磁盘缓存
//设置正在下载的图片
//url为空或请求的资源不存在时
//下载失败时显示的图片
//设置图片色彩模式 1px=2字节
//设置图片的缩放模式
//设置圆角 30代表半径 自定义
        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)//设置图片色彩模式 1px=2字节
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
                .displayer(new RoundedBitmapDisplayer(100))//设置圆角 30代表半径 自定义
                .build();
    }




    //返回item的类型总数  多条目的数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }


    //返回指定postion的条目的类型,返回的是一个int类型的值
    @Override
    public int getItemViewType(int position) {
        if(position%2==0){//是偶数
            return ITEM_IMAGE;
        }else{
            return ITEM_TITLE;//奇数行
        }


    }


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


    @Override
    public Object getItem(int i) {
        return data.get(i);
    }


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


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        //根据不同的类型,去加载不同的布局
        int type = getItemViewType(i);
        if(type==ITEM_IMAGE){
            ViewHolder holder;
            if(view==null){
                view=View.inflate(context,R.layout.item,null);
                holder=new ViewHolder();
                holder.tv=view.findViewById(R.id.tv);
                holder.imageView=view.findViewById(R.id.img);
                view.setTag(holder);
            }else{
                holder=(ViewHolder) view.getTag();
            }
            holder.tv.setText(data.get(i).getTitle());
            //打印图片url路径
            Log.d("zzz",data.get(i).getPicUrl());


            //3.下载图片
            ImageLoader.getInstance().displayImage(data.get(i).getPicUrl(),holder.imageView,options);
            return view;


        }else {
            ViewHolderTitle holderTitle;
            if(view==null){
                view=View.inflate(context,R.layout.item_title,null);
                holderTitle=new ViewHolderTitle();
                holderTitle.textView=view.findViewById(R.id.tv);


                view.setTag(holderTitle);
            }else{
                holderTitle=(ViewHolderTitle) view.getTag();
            }
            holderTitle.textView.setText(data.get(i).getTitle());


            return view;




        }


    }
    //item里的控件
    class ViewHolder{
        TextView tv;
        ImageView imageView;
    }
    //item_title
    class ViewHolderTitle{
        TextView textView;
    }

}


//辅助类

package zhanghaijiao.bawei.com.httpget_demo;


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


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 jane on 2018/1/3.
 * Application->Context 子类
 */


public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();


        Log.d("zzz","App入口");
        Toast.makeText(this,"app",Toast.LENGTH_SHORT).show();


        //自定义sd卡缓存目录 1.android默认cache-app被卸载时,缓存的目录一并被删除    2.自定义
//        File cachefile=getExternalCacheDir();
        File cachefile= new File(Environment.getExternalStorageDirectory().getPath()+"/images");
        //1.初使化--进行一下全局配置 Application
        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
                .memoryCacheExtraOptions(400, 700)//缓存图片最大的长和宽
                .threadPoolSize(3)//线程池的数量
                .threadPriority(4)
                .memoryCacheSize(20*1024*1024)//设置内存缓存区大小
                .diskCacheSize(80*1024*1024)//设置sd卡缓存区大小
                .diskCache(new UnlimitedDiscCache(cachefile))//自定义sd卡缓存目录
                .writeDebugLogs()//打印日志内容
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理
                .build();
        ImageLoader.getInstance().init(configuration);
    }
}

//MainActivity副本



  <ListView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/lv"></ListView>

//item 布局

   <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:id="@+id/img"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"


//自备json一条 

记得联网操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值