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);
}
}