안드로이드 - 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로 출력해줍니다.
'Android' 카테고리의 다른 글
android - 안드로이드 SQLite execSQL()과 rawQuery()의 차이 (0) | 2017.08.25 |
---|---|
android - 안드로이드 초간단 메모장 만들기 (2) | 2017.08.25 |
안드로이드 동영상 스트리밍(mjpeg-streamer) (0) | 2017.06.30 |
안드로이드 sqlite - SQLiteOpenHelper클래스 (0) | 2017.06.15 |
android - Execution failed for task ':app:buildNative' 에러 (0) | 2017.06.02 |