网络工具类 和使用方法

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.ui.fragment.news;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;

import cn.zhaoliang5156.toutiao1630a.R;
import cn.zhaoliang5156.toutiao1630a.adapter.AndroidNewsAdapter;
import cn.zhaoliang5156.toutiao1630a.bean.AndroidBean;
import cn.zhaoliang5156.toutiao1630a.net.HttpUtils;

/**
 * A simple {@link Fragment} subclass.
 */
public class AndroidFragment extends Fragment {

    public static final String TAG = AndroidFragment.class.getSimpleName();
    private HttpUtils httpUtils;
    private String url = "http://gank.io/api/data/Android/10/";
    private int page = 1;
    private ListHttpCallback listHttpCallback;
    private PullToRefreshListView pullToRefreshListView;
    private List<AndroidBean.ResultsBean> androidBeans = new ArrayList<>();
    private AndroidNewsAdapter adapter;

    public AndroidFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_android, container, false);

        pullToRefreshListView = view.findViewById(R.id.pull_to_refresh_listview);
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

            }
        });
        adapter = new AndroidNewsAdapter(getActivity(), androidBeans);
        pullToRefreshListView.setAdapter(adapter);

        httpUtils = HttpUtils.getInstance();
        listHttpCallback = new ListHttpCallback();
        httpUtils.getDataFromServer(url + page, listHttpCallback);
    }

    class ListHttpCallback implements HttpUtils.HttpUtilsCallback {

        @Override
        public void onSuccess(String result) {
            Log.i(TAG, "result:" + result);
            Gson gson = new Gson();
            AndroidBean androidBean = gson.fromJson(result, AndroidBean.class);
            androidBeans.addAll(androidBean.getResults());
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onError(String errorMsg) {

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42535851/article/details/81239017