bean包:
Health类:所获取数据的bean类,需要从聚合数据中申请接口获取。
mainactivity:
public class MainActivity extends AppCompatActivity {
private ListView lv;
private MyBaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
asyncRequestDataForGet("http://japi.juhe.cn/health_knowledge/infoList?key=4058f61d594dab092af70531abc05cb8");
//实现ListView条目点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//得到当前点击条目的对象
HealthInfo.ResultBean.DataBean dataBean = (HealthInfo.ResultBean.DataBean) adapter.getItem(position);
//得到图片地址
//String img = dataBean.getImg();
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
//intent.putExtra("img",img);
intent.putExtra("img",dataBean);
startActivity(intent);
}
});
}
/**
* 使用异步任务请求数据
*
*/
private void asyncRequestDataForGet(String url){
new AsyncTask<String,Void,String>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s == null)
{
return;
}
Gson gson = new Gson();
HealthInfo healthInfo = gson.fromJson(s, HealthInfo.class);
List<HealthInfo.ResultBean.DataBean> list = healthInfo.getResult().getData();
//将数据绑定适配器上
adapter = new MyBaseAdapter(MainActivity.this,list);
//将数据映射到ListView
lv.setAdapter(adapter);
}
@Override
protected String doInBackground(String... params) {
try {
String path = params[0];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if(code == 200){
InputStream is = connection.getInputStream();
String info = StreamTools.readFromNetWork(is);
return info;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(url);
}
}
MyApplication:
将获取的图片保存在sdcard 中之后的加载功能。可以实现在无网络环境下 的加载图片
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
String path = Environment.getExternalStorageDirectory()+"1507DPic";
File caCheDir = new File(path);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.threadPriority(100)
.threadPoolSize(5)
.memoryCacheExtraOptions(480,800)
.memoryCacheSize(2 * 1024 * 1024)
.diskCache(new UnlimitedDiskCache(caCheDir))
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.build();
//构建加载图片配置
ImageLoader.getInstance().init(config);
}
}
获取数据的适配器:
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<HealthInfo.ResultBean.DataBean> list;
private DisplayImageOptions options;
public MyBaseAdapter(Context context,List<HealthInfo.ResultBean.DataBean> list){
this.context = context;
this.list = list;
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageForEmptyUri(R.mipmap.ic_empty)
.showImageOnFail(R.mipmap.ic_error)
.showImageOnLoading(R.mipmap.loading)
.build();
}
@Override
public int getCount() {
return list != null ? list.size() : 0;
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = convertView.inflate(context,R.layout.item,null);
viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tvContent);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
//设置文本信息以及图片加载
viewHolder.tvContent.setText(list.get(position).getTitle());
//加载图片
ImageLoader.getInstance().displayImage(list.get(position).getImg(),viewHolder.ivIcon,options);
return convertView;
}
class ViewHolder{
ImageView ivIcon;
TextView tvContent;
}
}
点击listview条目所需要跳转的第二个activity,即数据详情界面:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
ImageView ivIcon = (ImageView) findViewById(R.id.ivIcon);
//得到上一个页面传递过来的图片地址
//String img = getIntent().getStringExtra("img");
HealthInfo.ResultBean.DataBean dataBean = (HealthInfo.ResultBean.DataBean) getIntent().getSerializableExtra("img");
DisplayImageOptions options = new DisplayImageOptions.Builder()
.displayer(new CircleBitmapDisplayer())
.build();
ImageLoader.getInstance().displayImage(dataBean.getImg(),ivIcon,options);
}
}
获取数据的工具类:
public class StreamTools {
/**
* 字节流转字符串
* @param is
*/
public static String readFromNetWork(InputStream is){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1){
baos.write(buffer,0,len);
}
return baos.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)