在子线程中请求服务器的代码 checkup()方法
private void checkup() {
new Thread() {
public void run() {
Message msg = Message.obtain();
long startTime = System.currentTimeMillis();//启动该线程的系统时间
try {
//请求网络的代码
URL url = new URL(getString(R.string.serverurl));
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("GET");//请求方法
conn.setConnectTimeout(4000);//超时时间
int code = conn.getResponseCode();//返回码200请求成功
if (code == 200) {
InputStream is = conn.getInputStream();
String result = StreamTools.readFromStream(is);
Log.i(TAG, "联网成功" + result);
JSONObject obj = new JSONObject(result);//解析json字符串
String version = (String) obj.get("version");//版本信息
description = (String) obj.get("description");//描述信息
apkurl = (String) obj.get("apkurl");
if (getAppVersion().equals(version)) {
msg.what = ENTER_HOME;
} else {
msg.what = SHOW_UPDATE_DIALOG;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
msg.what = URL_ERROR;
} catch (IOException e) {
e.printStackTrace();
msg.what = NETWORK_ERROR;
} catch (JSONException e) {
e.printStackTrace();
msg.what = JSON_ERROR;
} finally {
handler.sendMessage(msg);
long endTime = System.currentTimeMillis();//该线程执行完毕的时间
long dTime = endTime-startTime;//该线程的阻塞时间
if (dTime<3000) {
try {
Thread.sleep(3000-dTime);//若该线程的阻塞时间小于三秒继续睡眠到三秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}.start();
}
handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case SHOW_UPDATE_DIALOG:
showUpdateDialog();
break;
case ENTER_HOME:
Toast.makeText(getApplicationContext(), "", 0).show();
enterhome();
break;
case URL_ERROR:
Toast.makeText(getApplicationContext(), "URL_ERROR", 0).show();
enterhome();
break;
case NETWORK_ERROR:
Toast.makeText(getApplicationContext(), "NETWORK_ERROR", 0).show();
enterhome();
break;
case JSON_ERROR:
Toast.makeText(getApplicationContext(), "JSON_ERROR", 0).show();
enterhome();
break;
}
}
};










