使用异步请求网络数据

来源:互联网 发布:淘宝网注册支付宝 编辑:程序博客网 时间:2024/05/17 06:35


//主界面(包括优化Listview)

import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;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.google.gson.Gson;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView lv;    private List<StudentBean.NewslistBean> list;    private MyAdapter myAdapter;    private TextView mTV;    private ImageView img;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.lv);        //创建集合        list = new ArrayList<StudentBean.NewslistBean>();        //获取笛地址        intData();        myAdapter = new MyAdapter();    }    //获取地址    private void intData() {
//网络地址(直接更换)        new MyAsyncTaskString().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10");    }    //适配器    class  MyAdapter extends BaseAdapter{        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int i) {            return list.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            if(view==null){               view= View.inflate(MainActivity.this,R.layout.init_list,null);                mTV = view.findViewById(R.id.tv);                img = view.findViewById(R.id.img);            }            //添加图片到listview            new MyAsyncTaskBitmap(img).execute(list.get(i).getPicUrl());            mTV.setText(list.get(i).getTitle());            return view;        }    }    //获取图片    class  MyAsyncTaskBitmap extends  AsyncTask<String,Void,Bitmap>{        ImageView img;        public MyAsyncTaskBitmap(ImageView img) {            this.img = img;        }        @Override        protected void onPreExecute() {            super.onPreExecute();        }        @Override        protected Bitmap doInBackground(String... strings) {            return new  User().getBitmap(strings[0]);        }        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            img.setImageBitmap(bitmap);        }        @Override        protected void onProgressUpdate(Void... values) {            super.onProgressUpdate(values);        }    }    //获取String    class  MyAsyncTaskString extends AsyncTask<String,Void,String>{        @Override        protected void onPreExecute() {            super.onPreExecute();        }        @Override        protected String doInBackground(String... strings) {            return new User().getJsonString(strings[0]);        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            Gson gson = new Gson();            StudentBean studentBean = gson.fromJson(s, StudentBean.class);            list = studentBean.getNewslist();            lv.setAdapter(myAdapter);        }        @Override        protected void onProgressUpdate(Void... values) {            super.onProgressUpdate(values);        }    }}
//解析数据
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;/** * author:Created by WangZhiQiang on 2017/9/5. */public class User {    //解析String    public  String getJsonString(String string){        try {            URL url = new URL(string);            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            int code = urlConnection.getResponseCode();            if(code==200){                InputStream inputStream = urlConnection.getInputStream();                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));                StringBuilder stringBuilder = new StringBuilder();                String temp="";                while ((temp=bufferedReader.readLine())!=null){                    stringBuilder.append(temp);                }                String s = stringBuilder.toString();                return  s;            }        } catch (Exception e) {            e.printStackTrace();        }        return  null;    }    //解析图片(Bitmap    public Bitmap getBitmap(String string){        try {            URL url = new URL(string);            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            int code = urlConnection.getResponseCode();            if(code==200){                InputStream inputStream = urlConnection.getInputStream();                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);                return bitmap;            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}
//主界面布局
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.example.aaa.zhoukao_lian1.MainActivity">    <ListView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="wrap_content"/></android.support.constraint.ConstraintLayout>
//Listview布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        />    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>
//网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>