AsynckTask异步加载

来源:互联网 发布:管家婆怎么安装数据库 编辑:程序博客网 时间:2024/05/21 15:05
package com.liulailin.async;

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.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import static android.R.attr.data;

public class MainActivity extends AppCompatActivity {

    String path ="https://www.toutiao.com/api/pc/focus/";
    private ListView lv;
    List<BeanData.DataBean.PcFeedFocusBean> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        lv = (ListView) findViewById(R.id.lv);

        //getData();

        //Void
            new AsyncTask<String ,String,String>(){
                /**
                 * 子线程里面运行,做联网的操作
                 * @param strings
                 * @return
                 */
                @Override
                protected String doInBackground(String... strings) {
                    String path = strings[0];

                    try {
                        URL url = new URL(path);
                        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                        //get请求
                        urlConnection.setRequestMethod("GET");
                        //超时连接
                        urlConnection.setConnectTimeout(5000);
                        int responseCode = urlConnection.getResponseCode();
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        if (responseCode==200){
                            InputStream inputStream = urlConnection.getInputStream();

                            int len;
                            byte[] arr = new byte[1024*20];
                            while ((len=inputStream.read(arr))!=-1){
                                baos.write(arr,0,len);
                            }

                        }

                        //返回的值
                        return  baos.toString();

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    return null;
                }

                /**
                 * 在主线程里面运行,可以做UI更新操作
                 * @param s
                 */
                @Override
                protected void onPostExecute(String s) {
                    super.onPostExecute(s);

                    Gson gson = new Gson();
                    BeanData beanData = gson.fromJson(s, BeanData.class);
                    //集合就是所有的数据的集合
                    list = beanData.getData().getPc_feed_focus();

                    lv.setAdapter(new MyAdapter());

                   // Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();

                    //解析的操作,和展示到页面的操作

                }
            }.execute(path);



    }




    class MyAdapter extends BaseAdapter{

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

        @Override
        public Object getItem(int i) {
            return null;
        }

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

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            TextView tv = new TextView(MainActivity.this);
            tv.setText(list.get(i).getTitle());
            return tv;
        }
    }
}