Android

안드로이드 - HttpURLConnection 예제

로픽 2017. 8. 24. 14:08
300x250

안드로이드 - HttpURLConnection 예제


네트워크 예제에서 HttpURLConnection객체를 통해서 특정 URL의 html코드를 읽을 수 있습니다.



간단한 HttpURLConnection예제입니다.



**MainActivity.java 코드


public class MainActivity extends AppCompatActivity {


    final static String TAG = "MainActivity";

    String urlAddr = "https://m.naver.com/";

    Button btnNetCon;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        btnNetCon = (Button) findViewById(R.id.bt_network_con);

        btnNetCon.setOnClickListener(listener);

    }


    View.OnClickListener listener = new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            switch (view.getId()){

                case R.id.bt_network_con:

                    NetworkAsync network = new NetworkAsync(MainActivity.this, urlAddr);

                    network.execute(100);

                    break;

            }

        }

    };

}



** 이 부분에서 주의하실 점이 있습니다. 


다른 URL주소로 실행했을 때는 잘 수행되었는데 네이버의 웹주소 www.naver.com을 입력하면


NetworkAsync.java 조건문에서 HttpURLConnection.HTTP_OK에 일치하지 않아 조건문이 출력되지 않습니다.


그래서 모바일 네이버 주소를 입력해야합니다.



** NetworkAsync.java 코드


public class NetworkAsync extends AsyncTask<Integer, String, Integer> {


    final static String TAG = "NetworkAsync";

    Context mContext = null;

    String mAddr;

    ProgressDialog dialog = null;


    public NetworkAsync(Context c, String a){

        mContext = c;

        mAddr = a;

    }


    @Override

    protected void onPreExecute() {

        Log.i(TAG,"onPreExecute()");

        dialog = new ProgressDialog(mContext);

        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

        dialog.setTitle("Dialog");

        dialog.setMessage("down...");

        dialog.show();

    }


    @Override

    protected Integer doInBackground(Integer... integers) {

        Log.i(TAG,"doInBackground()");


        StringBuffer sb = new StringBuffer();

        InputStream is = null;

        InputStreamReader isr = null;

        BufferedReader br = null;

        Log.i(TAG,"doInBackground2()");

        try{

            URL url = new URL(mAddr);

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setConnectTimeout(10000);


            if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){

                String res = Integer.toString(conn.getResponseCode());

                String http = Integer.toString(HttpURLConnection.HTTP_OK);

                Log.i(TAG,res);

                Log.i(TAG,http);

                Log.i(TAG,"doInBackground3()");

                is = conn.getInputStream();

                isr = new InputStreamReader(is);

                br = new BufferedReader(isr);


                while(true){

                    String strLine = br.readLine();

                    if(strLine == null) break;

                    sb.append(strLine + "\n");

                }

                Log.i(TAG, "sb : " + sb.toString());

            }

        }catch(Exception e){

            e.printStackTrace();

        }finally {

            try{

                if(br!= null) br.close();

                if(isr!= null) isr.close();

                if(is!= null) is.close();

            }catch(Exception e2){

                e2.printStackTrace();

            }

        }

        return  null;

    }


    @Override

    protected void onProgressUpdate(String... values) {

        Log.i(TAG,"onProgressUpdate()");

        super.onProgressUpdate(values);

    }


    @Override

    protected void onPostExecute(Integer integer) {

        Log.i(TAG,"onPostExecute()");

        dialog.dismiss();

    }


    @Override

    protected void onCancelled(Integer integer) {

        Log.i(TAG,"onCancelled()");

        super.onCancelled();

    }

}



만약 네이버 웹주소를 입력하시면 conn.getResponseCode()에서 다른 신호인 FOUND 신호를 보내서 if문이 실행되지 않습니다.



모바일 네이버 주소로 변경하셔야합니다.



**AndroidManifest.xml


<uses-permission android:name="android.permission.INTERNET"/>



<application>태그 상단에 입력하시면 됩니다.



** activity_main.xml


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:id="@+id/mini_tab_layout"

    android:orientation="vertical"

    tools:context="com.example.dmbtv.myapplication4.MainActivity">



    <Button

        android:id="@+id/bt_network_con"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="NetWork Connection"/>

</LinearLayout>



레이아웃 xml의 경우 간단하게 버튼 하나로 구성되어있고 버튼을 클릭하면 html을 읽어들여  log로 출력해줍니다.




반응형