访问网络工具类

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
 * Created by Administrator on 2016/9/8 0008.
 * 简单访问网络工具类
 * get请求访问网络
 * post请求访问网络
 * 下载文件
 * 获取网络类型
 * 显示网络图片
 */
public class HttpUtils {


    /**
     * 从服务器取图片
     *http://bbs.3gstdy.com
     * @param url
     * @return
     */
    public static Bitmap getHttpBitmap(String url) {
        URL myFileUrl = null;
        Bitmap bitmap = null;
        try {
            myFileUrl = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
            conn.setConnectTimeout(0);
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    /**
     * 通过HttpUrlConnection发送GET请求
     * HttpUrlConnection是JDK里提供的联网API,
     * 我们知道Android SDK是基于Java的,
     * 所以当然优先考虑HttpUrlConnection这种最原始最基本的API,
     * 其实大多数开源的联网框架基本上也是基于JDK的HttpUrlConnection进行的封装罢了,
     * 掌握HttpUrlConnection需要以下几个步骤:
     * 1将访问的路径转换成URL。
     * 2,通过URL获取连接。
     * 3,设置请求方式。
     * 4,设置连接超时时间。
     * 5,设置请求头的信息。
     * 6,获取响应码
     * 7,针对不同的响应码,做不同的操作
     * 7.1,请求码200,表明请求成功,获取返回内容的输入流
     *
     * @return
     */
    public static String loginByGet(String path) {
//        String path ="http://192.168.0.107:8080/WebTest/LoginServerlet?username=" + username + "&password=" + password;
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");//5,设置请求头的信息。
            int code = conn.getResponseCode();
            if (code == 200) {
                InputStream is = conn.getInputStream(); // 字节流转换成字符串
                return streamToString(is);
            } else {
                return "网络访问失败";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "网络访问失败";
        }
    }


    /**
     * 通过HttpUrlConnection发送POST请求
     * 目前演示的是查询快递接口
     *
     * @param type
     * @param postid
     * @return
     */
    public static String loginByPost(String path, String type, String postid) {
//        String path = "http://192.168.0.107:8080/WebTest/LoginServerlet";
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            String data = "type=" + type + "&postid=" + postid;//组合参数
            conn.setRequestProperty("Content-Length", data.length() + "");
            // POST方式,其实就是浏览器把数据写给服务器
            conn.setDoOutput(true); // 设置可输出流
            OutputStream os = conn.getOutputStream(); // 获取输出流
            os.write(data.getBytes()); // 将数据写给服务器
            int code = conn.getResponseCode();
            if (code == 200) {
                InputStream is = conn.getInputStream();
                return streamToString(is);
            } else {
                return "网络访问失败";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "网络访问失败";
        }
    }

    /**
     * 将输入流转换成字符串
     *
     * @param is 从网络获取的输入流
     * @return
     */
    public static String streamToString(InputStream is) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            baos.close();
            is.close();
            byte[] byteArray = baos.toByteArray();
            return new String(byteArray);
        } catch (Exception e) {
            Log.e("SZJ", e.toString());
            return "";
        }
    }

    /**
     * 获取网络类型
     *
     * @param context
     * @return
     */
    public static String getNetType(Context context) {
        ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectMgr.getActiveNetworkInfo();
        if (info != null) {
            if (info.getType() == ConnectivityManager.TYPE_WIFI) {//wifi网络
                return "wifi网络";
            } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {// 非wifi网络
                return "移动网络";
            }
        }
        return "无网络";
    }

    /**
     * 文件下载
     *
     * @param handler         用于传递消息
     * @param url:文件的下载地址
     * @param path:文件保存到本地的地址
     * @throws IOException
     */
    public static void down_file(Handler handler, String url, String path) throws IOException {
        int downLoadFileSize;
        int fileSize;
        String filename;
        //下载函数
        filename = url.substring(url.lastIndexOf("/") + 1);
        //获取文件名
        URL myURL = new URL(url);
        URLConnection conn = myURL.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        fileSize = conn.getContentLength();//根据响应获取文件大小
        if (fileSize <= 0) throw new RuntimeException("无法获知文件大小 ");
        if (is == null) throw new RuntimeException("stream is null");
        File file1 = new File(path);
        File file2 = new File(path + filename);
        if (!file1.exists()) {
            file1.mkdirs();
        }
        if (!file2.exists()) {
            file2.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(path + filename);
        //把数据存入路径+文件名
        byte buf[] = new byte[1024];
        downLoadFileSize = 0;
        Message mes = handler.obtainMessage();
        mes.arg2 = fileSize;
        mes.what = 0;
        handler.sendMessage(mes);//下载前
        do {
            //循环读取
            int numread = is.read(buf);
            if (numread == -1) {
                break;
            }
            fos.write(buf, 0, numread);
            downLoadFileSize += numread;
            Message message = handler.obtainMessage();
            message.arg1 = downLoadFileSize;
            message.arg2 = downLoadFileSize * 100 / fileSize;
            message.what = 1;
            handler.sendMessage(message);//下载中,发送下载进度,页面更新
        } while (true);
        handler.sendEmptyMessage(2);//下载完成,页面提示
        try {
            is.close();
        } catch (Exception ex) {
            Log.e("tag", "error: " + ex.getMessage(), ex);
        }
    }

    /**
     * 获取MAC地址方法1
     * 通过访问 WifiManager
     * @param context
     * @return
     */
    public static String[] getMacByWifiManager(Context context) {
        String[] other = {"null", ""};
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        try {
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            if (wifiInfo.getMacAddress() != null) {
                other[0] = wifiInfo.getMacAddress();
                other[1] = intToIp(wifiInfo.getIpAddress());
            } else {
                other[0] = "Fail";
                other[1] = "0";
            }
        } catch (Exception e) {
            other[0] = "Fail";
            other[1] = "0";
        }
        return other;
    }

    /**
     * 获取MAC地址方法2
     * 通过读取文件获取
     *
     * @return
     */
    public static String getMacByFile() {
        String macSerial = " ";
        String str = "";
        try {
            Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            for (; null != str; ) {
                str = input.readLine();
                if (str != null) {
                    macSerial = str.trim();// 去空格
                    break;
                }
            }
        } catch (IOException ex) {
            // 赋予默认值
            ex.printStackTrace();
        }
        return macSerial;
    }


    /**
     * 获取IP地址
     * @param context
     * @return
     */
    public static String getLocalIpAddress(Context context) {
        //获取wifi服务
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        //判断wifi是否开启
        if (!wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        }
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ipAddress = wifiInfo.getIpAddress();
        String ip = intToIp(ipAddress);
        return ip;
    }

    /**
     * ipAddress转换为ip地址
     * @param i
     * @return
     */
    private static String intToIp(int i) {
        return (i & 0xFF ) + "." +
                ((i >> 8 ) & 0xFF) + "." +
                ((i >> 16 ) & 0xFF) + "." +
                ( i >> 24 & 0xFF) ;
    }

    /**
     * 获取公网IP
     * @return
     */
    public static String GetNetIp() {
        String IP = "";
        try {
            String address = "http://ipecho.net/plain";
            URL url = new URL(address);
            HttpURLConnection connection = (HttpURLConnection) url .openConnection();
            connection.setUseCaches(false);
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream in = connection.getInputStream();
                // 将流转化为字符串
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String tmpString = "";
                StringBuilder retJSON = new StringBuilder();
                while ((tmpString = reader.readLine()) != null) {
                    retJSON.append(tmpString);
                }
                IP = retJSON.toString();
            } else {
                IP = "";
                Log.e("提示", "网络连接异常,无法获取IP地址!");
            }
        } catch (Exception e) {
            IP = "";
            Log.e("提示", "获取IP地址时出现异常,异常信息是:" + e.toString());
        }
        return IP;
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值