AsyncTask异步;ListView列表展示数据

AsyncTask异步ListView列表展示数据

libs文件夹下加入jar包(导包): gson

=======================================

添加权限:

网络请求权限:INTERNET
<uses-permission android:name="android.permission.INTERNET"/>
网络判断权限:ACCESS_NETWORK_STATE
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

===========================================================

布局:

<ListView    android:id="@+id/list_view"    android:layout_width="match_parent"    android:layout_height="match_parent" />==========================================================================
json解析类:https://api.tianapi.com/wxnew/?key=32b83b189e5e5e520db1612a83d82033&num=10
============================================================主要方法:import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import com.google.gson.Gson;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView listview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listview = findViewById(R.id.list_view);        MyTask myTask = new MyTask();        myTask.execute("https://api.tianapi.com/wxnew/?key=32b83b189e5e5e520db1612a83d82033&num=10");    }    class MyTask extends AsyncTask<String, Void, String> {        @Override        protected String doInBackground(String... strings) {            StringBuilder builder = new StringBuilder();            try {                URL url = new URL(strings[0]);                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                urlConnection.setConnectTimeout(5000);                urlConnection.setReadTimeout(5000);                urlConnection.setRequestMethod("GET");                if (urlConnection.getResponseCode() == 200) {                    InputStream inputStream = urlConnection.getInputStream();                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));                    String str;                    while ((str = reader.readLine()) != null) {                        builder.append(str);                    }                }            } catch (Exception e) {                e.printStackTrace();            }            return builder.toString();        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            Gson gson = new Gson();            Result result = gson.fromJson(s, Result.class);            List<Result.NewslistBean> data = result.getNewslist();            MyAdapter myAdapter = new MyAdapter(data, MainActivity.this);            listview.setAdapter(myAdapter);        }    }}

=========================================================
MyAdapter 适配器方法:
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;class MyAdapter extends BaseAdapter {    private List<Result.NewslistBean> data;    private Context context;    public MyAdapter(List<Result.NewslistBean> data, Context context) {        this.data = data;        this.context = context;    }    @Override    public int getCount() {        return data.size();    }    @Override    public Object getItem(int i) {        return data.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder holder;        if (view == null) {            view= LayoutInflater.from(context).inflate(R.layout.item,null);            holder = new ViewHolder();            holder.name=view.findViewById(R.id.name);            holder.img=view.findViewById(R.id.img);            view.setTag(holder);        }else {            holder = (ViewHolder) view.getTag();        }        holder.name.setText(data.get(i).getDescription());        new MyTask(holder.img).execute(data.get(i).getPicUrl());        return view;    }    class ViewHolder {        public TextView name;        public ImageView img;    }    class MyTask extends AsyncTask<String, Void, Bitmap> {        private ImageView img;        public MyTask(ImageView img) {            this.img = img;        }        @Override        protected Bitmap doInBackground(String... strings) {            Bitmap bitmap = null;            try {                URL url = new URL(strings[0]);                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                urlConnection.setConnectTimeout(5000);                urlConnection.setReadTimeout(5000);                urlConnection.setRequestMethod("GET");                if (urlConnection.getResponseCode() == 200) {                    InputStream inputStream = urlConnection.getInputStream();                    bitmap = BitmapFactory.decodeStream(inputStream);                }            } catch (Exception e) {                e.printStackTrace();            }            return bitmap;        }        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            img.setImageBitmap(bitmap);        }    }}-------------------------------------------
R.layout.item
<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/img"        android:layout_width="50dp"        android:layout_height="50dp"        android:layout_margin="10dp"        tools:layout_editor_absoluteX="16dp"        tools:layout_editor_absoluteY="16dp" />    <TextView        android:id="@+id/name"        android:layout_width="200dp"        android:layout_height="50dp"        android:layout_alignTop="@+id/img"        android:layout_toEndOf="@+id/img"        android:layout_toRightOf="@+id/img"        tools:layout_editor_absoluteX="80dp"        tools:layout_editor_absoluteY="16dp" /></RelativeLayout>==================================================================
 

原文地址:https://www.cnblogs.com/shenhuiran/p/8125669.html

时间: 2024-10-21 13:00:40

AsyncTask异步;ListView列表展示数据的相关文章

salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面

上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以及在本页面隐藏详情页面显示编辑页面. 实现这个功能以前主要需要先了解几个标签: lightning:recordForm: 此标签允许用户快速的创建一个form去查看,添加以及修改一条记录.集合了 lightning:recordEditForm 以及 lightning:recordViewFor

给ListView列表添加数据展示动画

给ListView的数据展示  做点动画效果,数据较多时,手指往上拉动数据时,下面的数据感觉是往上推的,直接上关键代码: ---------------------动画文件res/anim:--------------------------------- up_from_bottom.xml: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schema

Android异步加载学习笔记之一:用AsyncTask加载服务器json数据

我们知道在Android开发中,UI主线程不能执行耗时太久的操作,Activity一般是不超过5s,BroadCaseReceiver一般不超过10s,因为这些耗时操作不仅仅阻塞UI线程操作,还可能导致用户不想见到的ANR,所以我们需要使用异步操作. 我们通常用的异步操作有两种方式: 1:多线程或线程池异步加载, 2,AsyncTask异步任务操作(底层也是用的线程池). 数据来源于慕课网:json数据地址:http://www.imooc.com/api/techer?type=4&num=3

Windows程序==&gt;&gt;使用ListView控件展示数据

使用ListView控件展示数据 01.ImageList控件 1.了解了解         属性 说明 Images 储存在图像列表中的所有图像 ImageSize 图像列表中图像的大小 Transparent 被视为透明的颜色 ColorDepth 获取图像列表的颜色深度 Images中图像的存放方式与存放在数组中一样,通过Count属性可以获得Images中图像的个数.每个图像都有一个索引值,从0开始,使用Images[索引值],可以定位到一个图像. ImageList控件所包含的图像可以

【安卓9】SimpleCursorAdapter、在列表中展示数据

SimpleCursorAdapter SimpleCursorAdaper与SimpleAdapter类似,但数据来源是Cursor. 操作步骤: 在列表中展示数据 1 public MySQLiteOpenHelper(Context context) { 2 super(context,"person.db",null,1); 3 } 4 public void onCreate(SQLiteDatabase db) { 5 db.execSQL("create tab

jsp页面 列表 展示 ajax异步实现

1. 服务端先返回页面基本结构(如message.jsp), <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ tag

给listview添加数据,添加数据之后即刻显示出来,并把数据放在listview列表的最前面

//添加数据库,但是要在第二次重新加载的时候才会显示 blackdao.add(phone_num, "1"); Toast.makeText(CallSmsSafeActiviy.this, "短信黑名单添加成功", 0).show(); /*更新listview上面的数据,添加之后即刻刷新listview上面的数据, 因为listview上面的数据是是和List<blackNumberInfo> list关系最为密切 而List<blackNu

Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载

 在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是通过AsyncTask来实现,另一种方式则是通过ThreadPool来实现,今天我们就通过一个例子来讲解和对比这两种实现方式.     项目的结构如下所示:     在今天这个例子里,我们用到了之前一篇文章中写过的一个自定义控件,如果有同学感兴趣的话可以点击这里来先研究下这个控件的实现,为了配合异

快速数据列表展示(编辑中)

在页面数据和控件的自动交换机制中,我们通过PageX实现了一种快速的控件和数据交换机制,能够方便快捷地完成数据库中的数据记录的管理.一般情况下,在进入这个编辑页面之前,还应该有另外一个页面,可以一次展示多条数据记录的信息.在这个数据的列表界面中,可以进行各种操作,如删除.跳转.编辑等.这个数据列表页面不仅可以按照数据库的分类展示数据,也可以根据需要进行展示,如按指定字段排序.根据查询结果展示.分页展示等. 用什么来展示数据列表? 由于数据列表页面在数据管理中十分常用,因此,在微软的开发工具的发展