当前位置: 代码迷 >> Android >> 异步登录遇到的有关问题
  详细解决方案

异步登录遇到的有关问题

热度:58   发布时间:2016-04-28 06:19:31.0
异步登录遇到的问题
小弟刚学Android时间不久,现在做一项目遇到点问体想请教下各位。
我现在做一教务管理的系统,登录要用HTTP请求获得XML文件,其中的值来判断用户名密码是否正确。如果正确会返回一些用户信息。
如果直接在Activity中写入下载解析的话,会出现接收到请求之前,登录界面的假死现象。所以我想用异步任务来完成下载,解析。
现在问题来了,我在登陆界面如何接收到下载解析后的数据,并且在下载没有完成之前如果代码继续向下执行会出现空指针异常。
像下面这段代码是用来验证密码的,那个UserStr就是下载解析后生成的list,第0个元素是服务器返回验证的值,0为通过。
                if (!(userStr.get(0).equals("0"))) {
                        Toast.makeText(Login_Activity.this, "密码错误,请重新输入",
                                      Toast.LENGTH_SHORT).show();
                } else {
                        if (savePasswordCB.isChecked()) {// 登陆成功才保存密码
                                sp.edit().putString(cardNumStr, passwordStr).commit();
                        }
                        Toast.makeText(Login_Activity.this, "登陆成功,正在获取用户数据……",
                                       Toast.LENGTH_SHORT).show();
                }





onPostExecute能不能用来验证登录状态,Activity中如何获取到doInBackground处理后的值,如何在onProgressExecute中用Toast.makeText提示用户。
如果都不能,那这个登陆要怎么才能实现,麻烦帮忙设计下,小弟感激不尽

------解决方案--------------------
这种登录验证而已,直接用同步线程不行吗?
------解决方案--------------------
你把这段代码也写在异步线程中,解析之后。然后主线程放个正在加载...的遮罩层,解析线程执行完后,再通过handler把遮罩层关掉
------解决方案--------------------
引用:
Quote: 引用:

这种登录验证而已,直接用同步线程不行吗?
同步线程的话比如在网络不好耗时比较长的情况下,程序就会假死
所有app的网络请求等耗时操作都会有进度或者加载提示的,这样比较人性化,如2楼所说 也是那个意思。http请求也会有超时时长设置的,不可能说,网络不好,但是又确实有网,然后就一直在那等。
------解决方案--------------------
点击登录之后,弹出个“正在登录”的dialog,然后thread里登录,最后用handler通知主线程登录成功、失败 并取消dialog
  相关解决方案