list条目展示网络图片和文字

本文介绍了一种在Android应用中结合使用ListView和AsyncTask来从网络获取数据的方法。通过实例展示了如何异步加载列表视图中的文本和图片数据,并在主线程中更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

listview条目中的文字和图片都是从网络获取的
 */
public class MainActivity extends AppCompatActivity {


    private ListView lv;
    String urlTotal = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
    //    List<Student.DataBean> lists = new ArrayList<>();
    private MAdapter mAdapter;
    private List<Product.DataBean> dataList;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
//        mAdapter = new MAdapter();
        initData();


    }


    private void initData() {


        //用AsyncTask配合httpUrlConnection请求网络
            new MAsyncTask().execute(urlTotal);




    }








    class MAdapter extends BaseAdapter {




        @Override
        public int getCount() {
            return dataList.size();
        }


        @Override
        public Object getItem(int i) {
            return dataList.get(i);
        }


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


        @Override
        public View getView(int i, View containerView, ViewGroup viewGroup) {
            View view = View.inflate(MainActivity.this, R.layout.list_item, null);
            TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
            ImageView iv = (ImageView) view.findViewById(R.id.iv);
            tv_name.setText(dataList.get(i).getNews_title());


            /**
             * getView方法每个条目显示的时候都会调用,所以我们在这个请求图片,并设置
             *  把图片url传递给asyncTask
             */
            new MImageAsyncTask(iv).execute(dataList.get(i).getPic_url());


            return view;
        }
    }
    //异步处理任务类; 代替handler,可以方便的更新UI, 底层也是封装的Handler和Thread类;


    /**
     * 1-- 自己写个类继承AsyncTask(一般第一个泛型是传过来的url,第二个是进度数据,第三个是请求网络回来的返回值 )
     */
    class  MAsyncTask extends AsyncTask<String,Void,String> {


        // 这个方法是在子线程请求网络用
        //strings 是可变参数,是个数组;
        @Override
        protected String doInBackground(String... strings) {
            String url = strings[0];
            //用联网工具类请求数据;
            String result = NetWordUtils.getNetjson(url);
            //把请求到的json返回出去;返回个了主线程的那个方法(onPostExecute)
            return result;
        }




        //这个方法是存在于主线程,更新UI用;这个方法的参数 就是doInBackground返回的从网络获取到的数据
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            Product product = gson.fromJson(s, Product.class);
            dataList = product.getData();
            mAdapter = new MAdapter();
            lv.setAdapter(mAdapter);




        }
    }




    /**
     * 用AsyncTask配合HttpUrlconnection 请求图片
     */
    class  MImageAsyncTask extends AsyncTask<String, Void,Bitmap>{
        private ImageView iv;


        public MImageAsyncTask(ImageView iv) {
            this.iv= iv;
        }


        @Override
        protected Bitmap doInBackground(String... strings) {
            String urlString = strings[0];
            return NetWordUtils.getNetBitmap(urlString);
        }


        //这个方法是主线程,更新图片;
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            iv.setImageBitmap(bitmap);


        }
    }








}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值