主界面xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="HttpClient请求" android:onClick="httpClient" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> <Button android:text="UrlConnection请求" android:onClick="httpConnection" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" /> </LinearLayout> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </LinearLayout>
mainactivity界面
package com.example.zhouakao1; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ListView; import com.google.gson.Gson; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private MyAdapter myAdapter; private ListView listView; private List<DataDataBean.NewslistBean> list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.list_view); } public void httpClient(View view){ list.clear(); setAdapter(); MyTask myTask=new MyTask(); myTask.execute("httpClient"); } public void httpConnection(View view){ list.clear(); setAdapter(); MyTask myTask=new MyTask(); myTask.execute("httpConnection"); } class MyTask extends AsyncTask<String,Void,String>{ @Override protected String doInBackground(String... strings) { if ("httpClient".equals(strings[0])) { try { SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); HttpClient client = new DefaultHttpClient(); String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; HttpGet httpGet = new HttpGet(path); HttpResponse response=client.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode==200){ InputStream inputStream=response.getEntity().getContent(); String json=streamToString(inputStream,"utf_8"); return json; } } catch (IOException e) { e.printStackTrace(); } }else if ("httpConnection".equals(strings[0])){ String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"; try { URL url=new URL(path); HttpURLConnection connection=(HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode==200){ InputStream inputStream=connection.getInputStream(); String json=streamToString(inputStream,"utf_8"); return json; } } catch (Exception e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(String s) { Gson gson=new Gson(); DataDataBean dataDataBean=gson.fromJson(s,DataDataBean.class); if (dataDataBean!=null){ list.addAll(dataDataBean.getNewslist()); setAdapter(); } } } private void setAdapter(){ if (myAdapter==null){ myAdapter =new MyAdapter(MainActivity.this,list); listView.setAdapter(myAdapter); }else{ myAdapter.notifyDataSetChanged(); } } private String streamToString(InputStream inputStream,String charset) { //转成字符流 try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset); //转成缓冲流 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取 String s = null; StringBuilder builder = new StringBuilder(); while ((s = bufferedReader.readLine()) != null){ builder.append(s); } bufferedReader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } } databean界面package com.example.zhouakao1; import java.util.List; /** * Created by bawei on 2017/10/5. */ public class DataDataBean { /** * code : 200 * msg : success * newslist : [{"ctime":"2017-10-05","title":"不要这样给宝宝喝奶,营养全都没了,很多妈妈到现在还不懂!","description":"新生儿护理","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51513144.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168829&signature=K4hA3pLsD85k7IbnF1vrszICeu2*f*ewc59YXBM8PoxXjGYOK-DnLozKq2L9QOlKuCpBQWVHtbYG2RmsE4S6E8a1TmuKGghdnm9RiYSAiJ4="},{"ctime":"2017-10-05","title":"这是一篇年度点击率最高的文章(说得太精辟了)","description":"农合论谈","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51519556.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168829&signature=JrN1klxRg6kfRVoKYQwpOMksSOBsVl5hYp5o-Iqm1j4qg3J9yEkKoacq5B13VSwYE*9gMMCMwp7KSxOUJQT42TdaeDKtLj0ekxBEilEW6jM="},{"ctime":"2017-10-05","title":"精神层次越高的人越善良","description":"品读时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51237757.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168829&signature=tzKGr86gOELC*cyeS3OeZX7TjUXbEpxwcIPZC2PNXhlxaEmpFa6hYM9zRTklUx-y65kXuWqDG-SHdWYu1Dg*kd0Q6MQL3yDOmFhWebhGI*U="},{"ctime":"2017-10-05","title":"潇潇暮雨,洗清秋","description":"品读时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51519867.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168828&signature=urHOL0-aN5sZQ5oPRB9ReOWhSOPLjqh5*YaS*ryWnPC6jkECPuwN6bn7RUD627E3mG3BEoMPHJ8M93kb49Z5QQwHoDzlo4ohWAPf1sUPD90="},{"ctime":"2017-10-05","title":"微笑向暖,幸福花开","description":"品读时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51519896.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168828&signature=QxiHA3tzz42iDcb-8jDk4ix1Jhri7fRl-xXYsIpilan-JCC8zcWtwu0gGQoIaq-Ibv7h0iFv0yUCv6bQad3cQltndy*SIK3-wrh5MNB3PaE="},{"ctime":"2017-10-05","title":"最快乐的活法","description":"品读时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-50564128.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=408×tamp=1507168828&signature=*2Ksge32tkN*zCKjlRFauWXw1gs4pAaW3CdfPO67OkeRoWguQO4nIwroN3uG-06X72*mpP7UOHHQtZ8DGUKhWnNvf5ySwqqyFHQ*rJbNAHI="},{"ctime":"2017-10-05","title":"庄子:烦恼天天有,不捡自然无","description":"杨站长之家","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-28911349.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=408×tamp=1507168827&signature=zzRid8ZRDCh04NGKEF2cs5sn5pvX9nYM2cysJXF0k3G2AWfhXvYmANo*U-1ABrJLbKry5J-C22WMoin4*cZfZFO5Xf*ZgXXrAwhtHFvDg4E="},{"ctime":"2017-10-05","title":"25个趣味定律(非常实用,一定好好看看)","description":"益学堂","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-22379196.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=408×tamp=1507168827&signature=pKJAEwrKpUBc8BdN8rIUnAF*CYSrsQVe3buGmrA3rE5S9LeYvC5Yb7Tur0ijAXAtRAbxZSJQTA0W*X318xUnqFFp7NylyNcbswRyKXTfdsY="},{"ctime":"2017-10-05","title":"人生,没有过不去的坎","description":"伴禅入梦","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51517089.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168827&signature=kVREOdDIXaJuSERFrRt-fGrsd*EYR2Z3HzEMTxjmGsIzkYZ2CTVqcGkV-EjDrlqd7DRVWzz9blNJjRg0q-xgt7ngqOw0KAxAiJGwN4siebY="},{"ctime":"2017-10-05","title":"一句话,让你一生不生气!(长期有效)","description":"品茶时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-50315856.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168826&signature=TWtneWbEGG0jwBQbWwMoeZWdD7fifqPYbYgwW7wOk6bqNaKw6diN0e5u56B5v85Duzp6T8le5bRfOZ*KXmjzpsHsEJDZfT2HQ8GVucuiJZE="}] */ private int code; private String msg; private List<NewslistBean> newslist; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public List<NewslistBean> getNewslist() { return newslist; } public void setNewslist(List<NewslistBean> newslist) { this.newslist = newslist; } public static class NewslistBean { /** * ctime : 2017-10-05 * title : 不要这样给宝宝喝奶,营养全都没了,很多妈妈到现在还不懂! * description : 新生儿护理 * picUrl : https://zxpic.gtimg.com/infonew/0/wechat_pics_-51513144.jpg/640 * url : https://mp.weixin.qq.com/s?src=16&ver=407×tamp=1507168829&signature=K4hA3pLsD85k7IbnF1vrszICeu2*f*ewc59YXBM8PoxXjGYOK-DnLozKq2L9QOlKuCpBQWVHtbYG2RmsE4S6E8a1TmuKGghdnm9RiYSAiJ4= */ private String ctime; private String title; private String description; private String picUrl; private String url; public String getCtime() { return ctime; } public void setCtime(String ctime) { this.ctime = ctime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPicUrl() { return picUrl; } public void setPicUrl(String picUrl) { this.picUrl = picUrl; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }imageutil
public class ImageLoaderUtil { public static void init(Context context) { File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .threadPoolSize(3) // default 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径 .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder(true)) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() // 打印debug log .build(); //开始构建 ImageLoader.getInstance().init(config); } public static DisplayImageOptions getDefaultOption() { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位 .delayBeforeLoading(1000) // 下载前的延迟时间 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20) .build(); return options; } } baseAppctionpublic class BaseApplication extends Application{ @Override public void onCreate() { super.onCreate(); ImageLoaderUtil.init(this); } } 适配器package com.example.zhouakao1; 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.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /** * Created by bawei on 2017/10/5. */ public class MyAdapter extends BaseAdapter { Context context; List<DataDataBean.NewslistBean> list; public MyAdapter(Context context, List<DataDataBean.NewslistBean> list) { this.context=context; this.list=list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { ; return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view==null){ view= View.inflate(context,R.layout.item_layout,null); holder=new ViewHolder(); holder.textView=(TextView)view.findViewById(R.id.text_view); holder.imageView=(ImageView)view.findViewById(R.id.image_view); view.setTag(holder); }else{ holder= (ViewHolder) view.getTag(); } holder.textView.setText(list.get(i).getTitle()); ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),holder.imageView,ImageLoaderUtil.getDefaultOption()); return view; } class ViewHolder { TextView textView; ImageView imageView; } }item_layout<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:padding="10dp" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_marginLeft="10dp" android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image_view" android:layout_width="100dp" android:layout_height="100dp" /> </LinearLayout>