网络连接+HttpUrlConnection+AsyncTask

来源:互联网 发布:百度搜索排名算法 编辑:程序博客网 时间:2024/06/05 18:39

代码演示

JAVA

package com.bawei.zhangjinfeng20171105.frag;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;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 android.widget.Toast;import com.bawei.zhangjinfeng20171105.R;import com.bawei.zhangjinfeng20171105.bean.Bean;import com.bawei.zhangjinfeng20171105.util.Netstateutil;import com.bawei.zhangjinfeng20171105.util.Netutil;import com.google.gson.Gson;import java.util.ArrayList;import java.util.List;/** * Created by sky on 2017/11/05. */public class One extends Fragment {    private ListView lv;    private Myadaper m;    List<Bean.NewslistBean> list=new ArrayList<>();    private String surl="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10";    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.f1_list, container, false);        lv = view.findViewById(R.id.lv);        return view;    }    @Override    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);        m = new Myadaper();        lv.setAdapter(m);        //创建数组用于判断        String[] s={surl,"HttpUrlConnection"};        //获取网络连接的类型        int type = Netstateutil.getNewType(getActivity());        if(type!=-1){            Toast.makeText(getActivity(),"我有网络",Toast.LENGTH_SHORT).show();            AsyncTask<String, Void, String> execute = new MAsyncTask().execute(s);        }else{            Toast.makeText(getActivity(),"请检查网络",Toast.LENGTH_SHORT).show();        }    }    public class Myadaper 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) {            if(view==null){                view=View.inflate(getActivity(),R.layout.aa,null);            }            TextView tv=view.findViewById(R.id.tv);            ImageView iv=view.findViewById(R.id.iv);            tv.setText(list.get(i).getTitle());            //用AsyncTask1传过去有参ImageView控件和接口.刷新图片            new MAsyncTask1(iv).execute(list.get(i).getPicUrl());            return view;        }    }    /**     * 泛型  第一个参数:传过来的url     *      第二个参数 :进度     *      第三个参数 :接口请求成功返回的东西(json,bitmap)     */    private class MAsyncTask1 extends AsyncTask<String,Void,Bitmap> {        ImageView iv;        public MAsyncTask1(ImageView iv) {            this.iv=iv;        }        /**         *  这个方法在子线程,在这个方法里进行联网操作         * @param strings 可变参数,底层是数组,里面放的是传过来的参数;         * @return         */        @Override        protected Bitmap doInBackground(String... strings) {            String string = strings[0];            Bitmap bit = Netutil.getNetBitmap(string);            return bit;        }        /**         * 这个方法在主线程, 直接更新ui即可;         * @param s s是doInBackground请求接口成功后返回的json         */        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            iv.setImageBitmap(bitmap);        }    }    private class MAsyncTask extends AsyncTask<String,Void,String>{        //这是子线程        @Override        protected String doInBackground(String... strings) {            String url = strings[0];            String s = strings[1];            //判断是那种请求方式            if(s.equals("HttpUrlConnection")) {                //直接用工具类获取json                String tostr = Netutil.getNetJson(url);                //返回给(前台方法,主线程方法onPostExecute)                return tostr;            }            return null;        }        //这个是主线程        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            //解析s,  直接给控件展示;            Gson g=new Gson();            Bean bean = g.fromJson(s, Bean.class);            List<Bean.NewslistBean> newslist = bean.getNewslist();            list=newslist;            m.notifyDataSetChanged();        }    }}
   Bean类(解析)

 Netstateutil类
package com.bawei.zhangjinfeng20171105.util;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;/** * Created by sky on 2017/11/05. */public class Netstateutil {    /**     * 获取手机网络状态     * -1 :无网络     *  0 :  蜂窝网络;     * 1  : wifi网络     * @return     * @param context 上下文对象     */    public static int getNewType(Context con){        int mState = -1;// 代表无网络        //获取android系统提供的服务, 转换成链接管理类,这个类专门处理链接相关的东西        ConnectivityManager manager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);        //manager封装了网络链接的信息        NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();        if(activeNetworkInfo==null){            return mState;        }        //获取网络连接的类型        int type = activeNetworkInfo.getType();        if(type==ConnectivityManager.TYPE_WIFI){//代表现在是wifi网络            mState=1;        }else if(type==ConnectivityManager.TYPE_MOBILE){            mState=0;        }        return mState;    }}
Netutil类

package com.bawei.zhangjinfeng20171105.util;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by sky on 2017/11/05. */public class Netutil {    private static String tag = "getNetJson";    public static String getNetJson(String urlString) {        try {            //url对象封装接口字符串            URL url = new URL(urlString);            //用url打开连接, 返回值我们用HttpURLConnection            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setConnectTimeout(8000);//设置链接超时时间            int responseCode = urlConnection.getResponseCode(); //获取状态码            if (responseCode == 200) {                InputStream inputStream = urlConnection.getInputStream();                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));                //可拼接的字符串                StringBuilder stringBuilder = new StringBuilder();                String temp =null;                while ((temp = bufferedReader.readLine()) != null) {                    stringBuilder.append(temp);                }                String jsonString = stringBuilder.toString();                return jsonString;            } else {            }        } catch (MalformedURLException e) {            e.printStackTrace();            Log.e(tag, "getNetJson: " + e.toString());        } catch (IOException e) {            e.printStackTrace();            Log.e(tag, "getNetJson: " + e.toString());        }        return "";    }    /**     * 获取网络图片     *     * @param urlString     * @return     */    public static Bitmap getNetBitmap(String urlString) {        try {            URL url = new URL(urlString);            HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();            httpurlConnection.setConnectTimeout(8000);//设置链接超时时间            int responseCode = httpurlConnection.getResponseCode();            if (responseCode == 200) {                InputStream inputStream = httpurlConnection.getInputStream();                //BitmapFactory:  android提供好的加工图片的工具类,                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);                return bitmap;            } else {                //do nothing            }        } catch (MalformedURLException e) {            e.printStackTrace();            Log.e(tag, "getNetBitmap: " + e.toString());        } catch (IOException e) {            e.printStackTrace();            Log.e(tag, "getNetBitmap: " + e.toString());        }        return null;    }}
XML(忽略)
别忘了权限和依赖



原创粉丝点击