안녕하세요
예외 처리와 관련해서 질문을 하나 드리려 합니다
제가 html 값을 파싱해서 폰에 띄워주는 앱을 만들었는데요
시작하고 옵션에서 두 주소중 하나를 선택할 수 있습니다
문제는 두 주소를 선택하게 한 이유가, 둘중의 한 주소가 아예 서버가 꺼져 있을 가능성이 크기 때문입니다
제 소스로는, 만약에 유효하지 않은 URL을 선택하고 리프레시를 누르면, 앱이 아예 종료되 버립니다
예외 처리용 핸들러는 만들어 두었는데, 어디에 적용해야 하는지 알수가 없습니다
URL url = new URL(mAddr);
을 사용합니다
제가 구글링해본 바로는, 주소가 유효하지 않을 시
MalformedURLException 가 리턴된다고 하는데
그런거 없고 그냥 앱이 강제로 종료되 버립니다
저는 현재 유효하지 않은 주소를 옵션에서 선택하더라도,
앱이 강제 종료되지 않고 대신
예외 처리용 핸들러가 작동되게 하고 싶습니다
핸들러는
Handler mAfterDown2 = new Handler() {// 핸들러
public void handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), "내친구 화분을 켜주세요",
Toast.LENGTH_LONG).show();
// try {
// Thread.sleep(100000);
// finish();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
};
입니다
혹시 답변하시는데 도움 되실까 하여 전체 소스를 아래에 첨부합니다
제 메인 액티비티입니다
package ex.myfot;
import java.io.*;
import java.net.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import ex.myfot.R.layout;
import ex.myfot.R;
import android.*;
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
// 자바의 네트워크 클래스 사용
public class MainActivity extends Activity {
ProgressDialog mProgress;
DownThread mThread;
String juso;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//juso = "http://www.nalda.vv.si";
juso = "http://192.168.43.136";
// 이미지버튼 클릭시 스레드 실행
ImageButton imgbtn = (ImageButton) findViewById(R.id.imageButton1);
imgbtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mProgress = ProgressDialog.show(MainActivity.this,
"잠시 기다려 주세요", "화분과 대화중...");
mThread = new DownThread(juso);
mThread.start();
}
});
// 처음 실행시 한번 값 읽어옴(스레드 실행)
mProgress = ProgressDialog.show(MainActivity.this, "잠시 기다려 주세요",
"화분과 대화중...");
mThread = new DownThread(juso);
mThread.start();
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem item=menu.add(0,1,0,"GOMNET");
menu.add(0,2,0,"Android5435");
SubMenu etc = menu.addSubMenu("기타");
etc.add(0,3,0,"myfot.iptime.org");
etc.add(0,4,0,"192.168.43.136");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
juso = "http://myfot.iptime.org";
return true;
case 2:
juso = "http://192.168.43.136";
return true;
case 3:
juso = "http://myfot.iptime.org";
return true;
case 4:
juso = "http:/192.168.43.136";
return true;
}
return false;
}
class DownThread extends Thread {
String mAddr;
String line; // 습도값을 저장할 line
int supdo = 0;
DownThread(String addr) {
mAddr = addr;
}
public void run() {// 값 읽어오는 스레드 실행
StringBuilder html = new StringBuilder();
try {
URL url = new URL(mAddr);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
if (conn != null) { // 커넥트가 제대로 됐을때
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
for (int i = 0; i < 4; i++) {
line = br.readLine();
}
br.close();
//
}
conn.disconnect();
}
} catch (Exception ex) {
mAfterDown2.sendEmptyMessage(0);
}
mAfterDown.sendEmptyMessage(0);
}
}
Handler mAfterDown = new Handler() {// 핸들러
public void handleMessage(Message msg) {
mProgress.dismiss();
TextView result2 = (TextView) findViewById(R.id.textView1);
result2.setText(mThread.line);
mThread.supdo = Integer.parseInt(mThread.line);
@SuppressWarnings("unused")
RatingBar rating = (RatingBar) findViewById(R.id.ratingBar1);
// 각 습도별 레이팅 바 설정
if (mThread.supdo > 700) {
rating.setRating((float) 5.0);
} else if (mThread.supdo > 625) {
rating.setRating((float) 4.5);
} else if (mThread.supdo > 550) {
rating.setRating((float) 4.0);
} else if (mThread.supdo > 475) {
rating.setRating((float) 3.5);
} else if (mThread.supdo > 400) {
rating.setRating((float) 3.0);
} else if (mThread.supdo > 325) {
rating.setRating((float) 2.5);
} else if (mThread.supdo > 250) {
rating.setRating((float) 2.0);
} else if (mThread.supdo > 175) {
rating.setRating((float) 1.5);
} else if (mThread.supdo > 100) {
rating.setRating((float) 1.0);
} else if (mThread.supdo > 50) {
rating.setRating((float) 0.5);
} else {
rating.setRating((float) 0);
}
}
};
Handler mAfterDown2 = new Handler() {// 핸들러
public void handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), "내친구 화분을 켜주세요",
Toast.LENGTH_LONG).show();
// try {
// Thread.sleep(100000);
// finish();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
};
}
긴 질문 읽어주셔서 감사합니다
답변 감사히 받겠습니다