Android16 - 네트워크 요청 캡슐화

3550 단어

1. HttpURLconnection의 네트워크 요청 캡슐화

  • 네트워크 요청 결과의 리셋으로 인터페이스를 먼저 정의
  • ///      
    public interface HttpCallbackListener {
        //          
        void onFinish(String response);
        //          
        void onError(Exception e);
    }
    
  • 네트워크 요청을 봉인한 코드
  • public class HttpUtil {
        public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    HttpURLConnection connection = null;
                    try {
                        URL url = new URL(address);
                        connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);
                        connection.setDoInput(true);
                        connection.setDoOutput(true);
                        InputStream in = connection.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null) {
                            response.append(line);
                        }
                        if (listener != null) {
                            //           ,  onFinish  ,      
                            listener.onFinish(response.toString());
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        //    ,  onError()  
                        listener.onError(e);
                    } finally {
                        if (connection != null) {
                            connection.disconnect();
                        }
                    }
                }
            }).start();
        }
    }
    
  • 호출 실례
  • String address = "http://10.0.2.2/get_data.json";
    HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
                        @Override
                        public void onFinish(String response) {
                            //          
                            parseJSONWithGSON(response);
                        }
                        @Override
                        public void onError(Exception e) {
                            //        
                        }
                    });
    

    2. OKHttp의 네트워크 요청 캡슐화

  • 봉인 코드는 다음과 같다
  •     ///  OKHttp     
        public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(address)
                    .build();
            client.newCall(request).enqueue(callback);
        }
    
  • 호출 실례
  • String address = "http://10.0.2.2/get_data.json";
                   HttpUtil.sendOkHttpRequest(address, new Callback() {
                       @Override
                       public void onFailure(Call call, IOException e) {
                           //       
                       }
                       @Override
                       public void onResponse(Call call, Response response) throws IOException {
                           //            
                           //            
                           String responseData = response.body().string();
                           showRespons(responseData);
                       }
                   });
    

    좋은 웹페이지 즐겨찾기