编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

imageLoader的图片加载方式(imageuploader)

wxchong 2024-07-26 23:07:06 开源技术 15 ℃ 0 评论

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;

}

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表