做项目时用到通信部分大多都是要弹出加载框,然后开始数据传输,但是碰到网卡的时候,用户可能会取消登陆,不过按下返回键的话,当前的ProgressDialog会消失,但是数据可能已经通过接口传输到服务端了,我碰到的问题是取消后,服务端依旧会把数据返回到客户端,然后手持段会执行接收到数据的方法,我的解决办法利用全局的静态变量,重写cancel()方法,已登陆为例下面贴下相关代码
public class IProgressDialog extends ProgressDialog {
public IProgressDialog(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void cancel() {
// TODO Auto-generated method stub
<span style="font-family: Arial, Helvetica, sans-serif;">MyApplication</span><span style="font-family: Arial, Helvetica, sans-serif;">._LOADING = 2;</span>
super.cancel();
}
}
public class RemoteLoginProgressDialog extends Thread {
private IProgressDialog progressDialog = null;
public RemoteLoginProgressDialog(Context context,String title,String msg,Runnable run){
super(run);
progressDialog = new IProgressDialog(context);
progressDialog.setTitle(title);
progressDialog.setMessage(msg);
}
@Override
public synchronized void start() {
progressDialog.show();
super.start();
}
@Override
public void run() {
try{
super.run();
}catch(Exception e){
e.printStackTrace();
}finally{
progressDialog.dismiss();
}
}
new RemoteLoginProgressDialog(this, "用户登录", "请稍等", new Runnable() {
@Override
public void run() {
FmcgApplication._LOADING = 1;
UserService us = new UserService(LoginActivity.this);
User user = RemoteUserService.login(username, pwd);
if (!et_account.getText().toString().equals(user.username) || <span style="font-family: Arial, Helvetica, sans-serif;">MyApplication</span><span style="font-family: Arial, Helvetica, sans-serif;">._LOADING != 1) {</span>
return;
}
//登陆的后续方法
}
}).start();
我用的这个方法是没法阻止数据的传输,只能在获取数据时判断是否取消了IProgressDialog的显示,谁有其他方法指点下,能在取消时阻止数据的传输就更好了