阅读背景:

网络工具类 和使用方法

来源:互联网 
package cn.zhaoliang5156.toutiao1630a.net;

import android.os.AsyncTask;
import android.text.TextUtils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 网络工具类
 * 思路:
 * 1. 暴露一个请求数据的方法
 * 2. 请求数据的方法中要异步请求网络
 * 3. 异步任务需要访问网络
 * 4. 网络回来的数据我们需要判断状态码
 * 5. 需要使用接口回调传出数据
 *
 * @author zhaoliang
 * @version 1.0
 * @create 2018/7/26
 */
public class HttpUtils {
    private static final HttpUtils ourInstance = new HttpUtils();

    public static HttpUtils getInstance() {
        return ourInstance;
    }

    private HttpUtils() {
    }

    /**
     * 从网络获取数据
     *
     * @param url
     */
    public void getDataFromServer(String url, HttpUtilsCallback callback) {
        // 开启异步任务
        new LoadDataTask(callback).execute(url);
    }

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

        private HttpUtilsCallback callback;

        public LoadDataTask() {
        }

        public LoadDataTask(HttpUtilsCallback callback) {
            this.callback = callback;
        }

        @Override
        protected String doInBackground(String... strings) {
            try {
                URL url = new URL(strings[0]);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    return inputStream2String(connection.getInputStream());
                }
            } catch (Exception e) {
                callback.onError(e.getMessage());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (!TextUtils.isEmpty(s)) {
                callback.onSuccess(s);
            } else {
                callback.onError("没有收到数据");
            }
        }
    }

    /**
     * 流转换成字符串
     *
     * @param inputStream
     * @return
     * @throws IOException
     */
    private String inputStream2String(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int len = -1;
        byte[] b = new byte[1024];
        while ((len = inputStream.read(b)) != -1) {
            outputStream.write(b, 0, len);
        }
        return new String(outputStream.toByteArray());
    }

    public interface HttpUtilsCallback {
        void onSuccess(String result);

        void onError(String errorMsg);
    }
}
package cn.zhaoliang5156.toutiao1630a.net



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: