网络连接+HttpUrlConnection+AsyncTask

代码演示

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(忽略)
别忘了权限和依赖




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值