AsyncTask+ListView列表展示数据


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

 //https://www.cnblogs.com/shenhuiran/p/8125669.html

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

 

添加权限:

 

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

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

 

布局:

<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>

猜你喜欢

转载自blog.csdn.net/sylkeel/article/details/79923229