以前研究与服务器交互时的进度对话框ProgressDialog在网上看得一些例子总是给我这个新手弄的云里雾里的,这么个简单的东西有点写的很复杂,有的逻辑不明确,今天我写了一个给新手们借鉴一下,以免走更多的弯路。
废话不多说了,先上图,最讨厌没图了。
下面看看实现代码:
package com.example.progressdialogdemo;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
/**
*
* @author easy
* progressdialogdemo
*
*/
public class MainActivity extends Activity {
private Boolean isNetError=true;
/** 模拟获取返回的 **/
private String canshu1;
/** 这是你的进度条 **/
private ProgressDialog proDialog;
/** 这是用于登录成功之后的事件 这里是在本界面显示登录返回的信息 **/
private TextView textView1;
private Button button1;
/** 这是模拟服务器返回登录后的参数,例如json **/
private EditText editText1;
/** new 一个 Handler,这里是要写在onCreate前面 **/
Handler loginHandler = new Handler() {
//得到传递过来的message
public void handleMessage(Message msg) {
isNetError = msg.getData().getBoolean("isNetError");
canshu1 = msg.getData().getString("canshu1");
if (isNetError&&canshu1.equals("admin")) {
Toast.makeText(MainActivity.this, "登录成功:admin",
Toast.LENGTH_SHORT).show();
textView1.invalidate();
textView1.setText("登录成功:admin");
}else{
Toast.makeText(MainActivity.this, "出错了,请输入admin",
Toast.LENGTH_SHORT).show();
textView1.invalidate();
textView1.setText("登录出错了");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.editText1);
textView1 = (TextView) findViewById(R.id.textView1);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//调用 LoginDialog 方法
LoginDialog();
}
});
}
/** 进度条,自己可以定义 **/
private void LoginDialog() {
proDialog = ProgressDialog.show(MainActivity.this, "连接中..",
"连接中..请稍后....", true, true);
// 开一个线程进行登录验证
Thread loginThread = new Thread(new LoginFailureHandler());
loginThread.start();
}
/** 登录时调用的Runnable **/
public class LoginFailureHandler implements Runnable {
@Override
public void run() {
//这里模拟登录时间延时,可换成登录请求验证什么的
try {
Thread.sleep(2000);//括号里面的2000代表2000毫秒,也就是2秒,可以该成你需要的时间
canshu1 = editText1.getText().toString();
} catch (InterruptedException e) {
e.printStackTrace();
}
//这里写获取到参数之后东西并存在Bundle里面
if(isNetError){
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putBoolean("isNetError", isNetError);
bundle.putString("canshu1", canshu1);
//封装到message里面给Handler发送过去
message.setData(bundle);
loginHandler.sendMessage(message);
//loginHandler处理完毕取消进度条
proDialog.dismiss();
}
}
}
}
上面都有注释,是不是很简单,你学会了吗?