本人有个项目 需要在请求网络的时候显示等待对话框,等响应完成后在消失,我想大家能明白,现在我的难点就是不知道怎么去写 请求网络的代码写好了 如下
public static String getJSONString() throws Exception {
String path = "http://192.168.0.66:8080/javawebs/findlist";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setReadTimeout(5 * 1000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream inStream = conn.getInputStream();
byte[] data = StreamTool.readInputStream(inStream);
json = new String(data);
return json;
}
然后在Activity中的onCreate方法中有个按钮事件去请求网络,我想在点击这个按钮后如果网络延时过大会显示这个等待对话,等加载完成后子关闭他,这个要怎么写 onCreate里的按钮事件如下
down.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
RecordJson.getJSONString();
rb = RecordJson.getRecord();
topictext.setText(rb.getTopic());
topictext.startAnimation(animation);
} catch (Exception e) {
downToast();
}
}
});
public static String getJSONString() throws Exception {
String path = "http://192.168.0.66:8080/javawebs/findlist";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setReadTimeout(5 * 1000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
InputStream inStream = conn.getInputStream();
byte[] data = StreamTool.readInputStream(inStream);
json = new String(data);
return json;
}
然后在Activity中的onCreate方法中有个按钮事件去请求网络,我想在点击这个按钮后如果网络延时过大会显示这个等待对话,等加载完成后子关闭他,这个要怎么写 onCreate里的按钮事件如下
down.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
RecordJson.getJSONString();
rb = RecordJson.getRecord();
topictext.setText(rb.getTopic());
topictext.startAnimation(animation);
} catch (Exception e) {
downToast();
}
}
});
public void loading(String msg){
if(msg!=null){
load_dialog.setTitle(msg);
}else{
load_dialog.setTitle("请等待...");
}
load_dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
load_dialog.show();
}
public void done(){
if(load_dialog!=null){
load_dialog.dismiss();
}
}
调用 // 更新
Button refresh = (Button)findViewById(R.id.btn_refresh);
refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loading("正在获取最新动态.");
if(!isNetworkAvailable(FeedActivity.this)){
return;
}
Message msg = new Message();
msg.what = DataService.FEED_UPDATE;
DataService._handler.sendMessage(msg); // 因为我的数据读取为非UI线程,所以done方法自已找地方放了。
}
});
另外,android的Dialog是异步的,不是模态阻塞的窗口,所以,在设备比较差的机器上,显示窗口都是一瞬间,我也暂时没找到方法流泪。
1.显示等待对话框
ProgressDialog Dialog = SearchpProgressDialog = ProgressDialog.show(LoginActivity."xxx","xxx",true);//
2。启动线程请求网络
new Thread(new GetSerListThread()).start();//开启线程请求网络
class GetSerListThread extends Thread{
@Override
public void run() {
super.run();
//请求网络代码网络的代码
//请求完毕使用handler更新主线程
e.printStackTrace();
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg); // 向Handler发送超时消息,更新UI
}
}
Handler handler = new Handler() {
public void handleMessage(Message m) {
switch (m.what) {
// 处理UI更新等操作
case ID_USER:
//等待对话框dismiss
if(Dialog != null){
Dialog.dismiss();
}
break;
}
}
public void onClick(View v) {
//点击按钮时显示等待框,然后开启线程下载
1.显示等待对话框
ProgressDialog Dialog = SearchpProgressDialog = ProgressDialog.show(LoginActivity."xxx","xxx",true);//
2。启动线程请求网络,
new Thread(new GetSerListThread()).start();
});/开启线程请求网络
class GetSerListThread extends Thread{
@Override
public void run() {
super.run();
//请求网络代码网络的代码
//请求完毕使用handler更新主线程
RecordJson.getJSONString();
rb = RecordJson.getRecord();
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg); // 向Handler发送消息,更新UI}//使用handler更新UI
Handler handler = new Handler() {
public void handleMessage(Message m) {
switch (m.what) {
// 处理UI更新等操作
case ID_USER:
//等待对话框dismiss
if(Dialog != null){
Dialog.dismiss();
topictext.setText(rb.getTopic());
topictext.startAnimation(animation);
}
break;
}
}
}步骤就是点击显示等待框,同时多线程开始请求网络,请求网络结束后,用handler更新UI(关闭等待对话框和设置TextView的值)