网络请求 + 使用子线程更新数据 + Asynctask实现异步执行 + Gson解析

在这里插入图片描述
一·主页面MainActivity

public class MainActivity extends AppCompatActivity {

    private ViewPager pager;
    private RadioGroup radio;
    private ArrayList<Fragment> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);

        pager = findViewById (R.id.pager);
        radio = findViewById (R.id.radioGroup);

        list = new ArrayList<Fragment> ();
        list.add (new Frag_01());
        list.add (new Frag_02());
        list.add (new Frag_03());

        pager.setAdapter (new FragmentPagerAdapter (getSupportFragmentManager ()) {
            @Override
            public Fragment getItem(int i) {
                return list.get (i);
            }

            @Override
            public int getCount() {
                return list.size ();
            }
        });
        //滑动的时候切换按钮选中状态
        pager.addOnPageChangeListener (new ViewPager.OnPageChangeListener () {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                radio.check (radio.getChildAt (i).getId ());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

        radio.setOnCheckedChangeListener (new RadioGroup.OnCheckedChangeListener () {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.button1:
                        pager.setCurrentItem (0);
                        break;
                    case R.id.button2:
                        pager.setCurrentItem (1);
                        break;
                    case R.id.button3:
                        pager.setCurrentItem (2);
                        break;
                }
            }
        });
    }
}

二·网络请求

public class HttpUitl {

    //注意工具类中使用静态方法
    public static boolean isNetworkConnected(Context context) {
        //判断上下文是不是空的
        //为啥要判断啊? 防止context是空的导致 报空指针异常
        if (context != null) {
            //获取连接管理器
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            //获取网络状态mConnectivityManager.getActiveNetworkInfo();
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();

            if (mNetworkInfo != null) {
                //判断网络是否可用//如果可以用就是 true  不可用就是false
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    //=====================================================
    public static String requestString(String strUrl) {
        try {
            //把String 变成URL
            URL url = new URL(strUrl);
            //打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //连接超时时间
            connection.setConnectTimeout(5000);
            //读取超时时间
            connection.setReadTimeout(5000);
            //设置请求方式(要大写)
            connection.setRequestMethod("GET");
            //判断请求码 HttpURLConnection.HTTP_OK
            if (connection.getResponseCode() == 200) {
                //获取输入流(输入=>读,输出=>写)
                //ctrl+alt+V 补全代码
                InputStream stream = connection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(stream, "utf-8");
                BufferedReader reader = new BufferedReader(inputStreamReader);

                //拼接字符串
                StringBuffer buffer = new StringBuffer();
                String str = "";
                //读取字符串
                while ((str = reader.readLine()) != null) {
                    //拼接字符串
                    buffer.append(str);
                }
                return buffer.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

三·Frag01

public class Frag_01 extends Fragment {

    private ListView listView;
    String strURL ="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate (R.layout.frag_01, container, false);
        listView = view.findViewById (R.id.listView1);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated (savedInstanceState);
        //网络请求
        new Thread (){
            @Override
            public void run() {
                super.run ();
                //判断网络
                boolean isnNet = HttpUitl.isNetworkConnected (getActivity ());
                String s="";
                if(isnNet){
                    //如果有网络就加载网络数据
                    s = HttpUitl.requestString (strURL);
                }else{
                    //如果没有网络就加载网络数据
                }
                Message message = new Message ();
                message.what=0;
                message.obj=s;
                handler.sendMessage(message);
            }
        }.start ();
    }
    Handler handler = new Handler (){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage (msg);
            switch (msg.what) {
                case 0:
                    //第七步:得到数据并解析
                    String s = (String) msg.obj;
                    //解析
                    Gson gson = new Gson();
                    JsonBean jsonBean = gson.fromJson (s, JsonBean.class);

                    List<JsonBean.DataBean> data = jsonBean.getData ();
                    //第八步:展示数据到listview上
                    listView.setAdapter(new MyAdapter(data,getActivity()));
                    break;


            }
        }
    };
}

四·Frag_02

public class Frag_02 extends Fragment {

    private ListView listView;
    String strURL ="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate (R.layout.frag_02, container, false);

        listView = view.findViewById (R.id.listView2);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated (savedInstanceState);
        MyAsyncTask task = new MyAsyncTask ();
        task.execute (strURL);
    }

    class MyAsyncTask extends AsyncTask<String,Void,String>{

        @Override
        protected String doInBackground(String... strings) {
            if(HttpUitl.isNetworkConnected (getActivity ())){
                return HttpUitl.requestString (strings[0]);
            }else{
                return "";
            }

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute (s);
            if(s.equals ("")){

            }else{
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson (s, JsonBean.class);

                List<JsonBean.DataBean> data = jsonBean.getData ();
                //第八步:展示数据到listview上
                listView.setAdapter(new MyAdapter (data,getActivity()));
            }
        }
    }

}

五·MyAdapter

public class MyAdapter extends BaseAdapter{

    private List<JsonBean.DataBean> data;
    private Context context;

    public MyAdapter(List<JsonBean.DataBean> data, Context context) {
        this.data = data;
        this.context = context;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null){
            convertView = View.inflate (context, R.layout.itme, null);
            holder = new ViewHolder();
            holder.text = convertView.findViewById (R.id.text);
            holder.image = convertView.findViewById (R.id.image);
            convertView.setTag (holder);
        }else {
            holder = (ViewHolder) convertView.getTag ();
        }
        JsonBean.DataBean dataBean = data.get (position);
        holder.text.setText (dataBean.getNews_id ());
        Glide.with (context).load (dataBean.getPic_url ()).into (holder.image);
        return convertView;
    }
    class ViewHolder{
        TextView text;
        ImageView image;
    }
}




<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width=“match_parent”
android:layout_height=“0dp”
android:layout_weight=“8”></android.support.v4.view.ViewPager>

<RadioGroup
    android:id="@+id/radioGroup"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="horizontal">
    <RadioButton
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="首页"
        android:button="@null"
        android:drawableTop="@drawable/sel"
        android:checked="true"
        android:textSize="25sp"
        android:gravity="center"
        />
    <RadioButton
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="首页"
        android:button="@null"
        android:drawableTop="@drawable/sel"
        android:checked="true"
        android:textSize="25sp"
        android:gravity="center"
        />
    <RadioButton
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="首页"
        android:button="@null"
        android:drawableTop="@drawable/sel"
        android:checked="true"
        android:textSize="25sp"
        android:gravity="center"
        />
</RadioGroup>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值