图片加载显示在listview上

来源:互联网 发布:mac怎么装千牛 编辑:程序博客网 时间:2024/05/16 02:25
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.imageload.bean.MenuInfo;
import com.example.imageload.utils.StreamTools;
import com.google.gson.Gson;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //找控件
        lv = (ListView) findViewById(R.id.lv);

        //请求数据

        try {

//调用方法

            getMenuInfo("http://apis.juhe.cn/cook/query.php?" +
                    "key=ff00d7339861c7fd7d5b54b16b76422a&menu=" +
                    URLEncoder.encode("秘制红烧肉", "utf-8"));
        }catch (Exception e){
            e.printStackTrace();
        }

    }


    /**
     * 请求菜谱信息数据的路径
     * @param path
     */
    private void getMenuInfo(String path){

//异步
        new AsyncTask<String,Void,String>(){


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

                if (s != null){
                    //解析服务器给我们响应的json数据
                    Gson gson = new Gson();
                   MenuInfo menuInfo =  gson.fromJson(s, MenuInfo.class);
                    List<MenuInfo.ResultBean.DataBean.StepsBean> steps = menuInfo.getResult().getData().get(0).getSteps();
                    //取出数据,使用ListView展示
                    lv.setAdapter(new MyBaseAdapter(steps));

                }


            }

            @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 == HttpURLConnection.HTTP_OK){

                        InputStream is = connection.getInputStream();
                        String json = StreamTools.readFromNetWork(is);
                        return  json;
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute(path);



    }

//适配器
    class MyBaseAdapter extends BaseAdapter{

        private List<MenuInfo.ResultBean.DataBean.StepsBean> steps;


        public MyBaseAdapter( List<MenuInfo.ResultBean.DataBean.StepsBean> steps){
            this.steps = steps;
        }

        @Override
        public int getCount() {
            return steps != null ? steps.size() : 0;
        }

        @Override
        public Object getItem(int position) {
            return steps.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {


            if(convertView == null){
                convertView = convertView.inflate(MainActivity.this,R.layout.item,null);
            }

            ImageView ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            TextView tvContent = (TextView) convertView.findViewById(R.id.tvContent);
            //设置相应控件显示信息
            tvContent.setText(steps.get(position).getStep());

            //加载图片
            loadImage(steps.get(position).getImg(),ivIcon);

            return convertView;
        }

        /**
         * 图片加载
         */
        private void loadImage(String path, final ImageView ivIcon){


            new AsyncTask<String,Void,Bitmap>(){

                @Override
                protected void onPostExecute(Bitmap bitmap) {
                    super.onPostExecute(bitmap);

                    //UI线程,UI操作这个放法做
                    //判断bitmap是否为空,如果不为空,则加载图片,否则给当前这个Item设置一个默认的图片
                    if (bitmap != null){
                        ivIcon.setImageBitmap(bitmap);
                    }else{
                        ivIcon.setImageResource(R.mipmap.ic_launcher);
                    }

                }

                @Override
                protected Bitmap 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 == HttpURLConnection.HTTP_OK){
                            InputStream is = connection.getInputStream();
                            return BitmapFactory.decodeStream(is);
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return null;
                }
            }.execute(path);

        }




    }

原创粉丝点击