[新手记录]在ProgressDialog中执行子线程取消的问题

来源:互联网 发布:网络瓶颈有哪些 编辑:程序博客网 时间:2024/06/07 10:38

做项目时用到通信部分大多都是要弹出加载框,然后开始数据传输,但是碰到网卡的时候,用户可能会取消登陆,不过按下返回键的话,当前的ProgressDialog会消失,但是数据可能已经通过接口传输到服务端了,我碰到的问题是取消后,服务端依旧会把数据返回到客户端,然后手持段会执行接收到数据的方法,我的解决办法利用全局的静态变量,重写cancel()方法,已登陆为例下面贴下相关代码

public class IProgressDialog extends ProgressDialog {public IProgressDialog(Context context) {super(context);// TODO Auto-generated constructor stub}@Overridepublic 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);}@Overridepublic synchronized void start() {progressDialog.show();super.start();}@Overridepublic void run() {try{super.run();}catch(Exception e){e.printStackTrace();}finally{progressDialog.dismiss();}}

new RemoteLoginProgressDialog(this, "用户登录", "请稍等", new Runnable() {@Overridepublic 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的显示,谁有其他方法指点下,能在取消时阻止数据的传输就更好了



0 0
原创粉丝点击