【转载】接口回调经典案例--网络…

    xiaoxiao2021-04-18  60

    原文来自于:接口回调经典案例--网络请求回调

    形象比喻:

    你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。(来自知乎)

    回调的好处:

    降低代码的耦合性,使代码更灵活、简洁

    步骤一 :定义回调接口

    public interface HttpCallBackListener {

        void onFinish(String respose);

        void onError(Exception e);

    }

    步骤二:定义回调函数(将接口作为参数)

    public class HttpUtil {

        public static void requestData(final String urlStr, final HttpCallBackListener listener) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    HttpURLConnection connection = null;

                    try {

                        URL url = new URL(urlStr);

                        connection = (HttpURLConnection) url.openConnection();

                        connection.setRequestMethod(GET);

                        connection.setConnectTimeout(8000);

                        connection.setReadTimeout(8000);

                        connection.setDoInput(true);

                        connection.setDoOutput(true);

                        InputStream in = connection.getInputStream();

                        BufferedReader br = new BufferedReader(new InputStreamReader(in));

                        StringBuilder sb = new StringBuilder();

                        String line;

                        while ((line = br.readLine()) != null) {

                            sb.append(line);

                        }

                        if (listener != null) {

                            //回调onFinish方法

                            listener.onFinish(sb.toString());

                        }

                    } catch (Exception e) {

                        if (listener != null) {

                            //回调onError方法

                            listener.onError(e);

                        }

                    } finally {

                        if (connection != null) {

                            connection.disconnect();

                        }

                    }

                }

            }).start();

        }

    }

    步骤三:使用回调方法一

    public class MainActivity extends AppCompatActivity {

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            HttpUtil.requestData(请求的网址, new HttpCallBackListener() {

                @Override

                public void onFinish(String respose) {

                    //处理请求

                }

                @Override

                public void onError(Exception e) {

                    //处理异常

                }

            });

        }

    }

    步骤三:使用回调方法二

    public class MainActivity extends AppCompatActivity implements HttpCallBackListener {

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            HttpUtil.requestData(请求的网址, this);

        }

        @Override

        public void onFinish(String respose) {

            //处理请求

        }

        @Override

        public void onError(Exception e) {

            //处理异常

        }

    }

    转载请注明原文地址: https://ju.6miu.com/read-674970.html

    最新回复(0)