Foursquare 源码研究之---------用户登录

   最近学习android,无意间看到Foursquare项目,于是下载下来看看了源码,看完后避免忘记,故写下此文.

当我们拿到一个android项目,首先有机会最好是运行看看效果和Debug项目.这样有个感官的认识,.我运行后的结果:

<!--StartFragment -->

 

注意:在debug的时候需要打开fanqiang软件,否则会报一个"java.net.UnknownHostException: Host is unresolved: api.foursquare.com:443" 错误. 还需要重启模拟器. 切记.

一. 首先看看登录.

由于登录比较简单,一笔带过.

打开Mainifest.xml文件找到

<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

 

 

 这应该就是程序的入口.当然在他的外面还有application标签.先不管application标签,找到name=".MainActivity",然后可以顺势找到MainActivity.java文件.找到onCreate方法.在onCreate方法中调用了redirectToLoginActivity().此方法重定向到LoginActivity.java,打开此类会发现很简单. 主要有2个EditText.2个button,一个是log-in,另一个是signin.

他们分别对应不同的listener. 注册按钮打开浏览器注册

startActivity(new Intent( Intent.ACTION_VIEW, Uri.parse(Foursquare.FOURSQUARE_MOBILE_SIGNUP)));

 

 

看上面的代码,不多说,主要看登录,

 

 

mLoginTask = new LoginTask().execute();

看到上面这句话了吧,启动一个新的Task来提交请求,因为登录是把用户名和密码通过http协议传输到server进行校验,是一个比较费时的操作,为了不让UI僵死. 继续看LoginTask类,他是继承了AsyncTask类, 为什么不采用Handler+Thread呢?要用AsyncTask呢? 因为前者跑起来后就无法管理,后者是可控的 具体请参考(http://blog.163.com/android_zhouwei/blog/static/1712422672010818105241892/), 继续看代码.主要看LoginTask,有如下代码

boolean loggedIn = Preferences.loginUser(foursquare, phoneNumber, password, location, editor)

 

 

 此句的主要作用是用phoneNumber和password进行setCredentials.认证.foursquare中采用的Digest 认证,此种方式的认证,可以从 mHttpClient.getCredentialsProvider().setCredentials(mAuthScope, new UsernamePasswordCredentials(phone, password));

 

 代码中看出来,如对认证不了解请参考

(http://www.cnblogs.com/huqingyu/archive/2008/02/17/1071649.html) 有详细的介绍.

认证完之后是把user信息保存在SharedPreferences中--storeLoginAndPassword(editor, login, password); 之后调用User user = foursquare.user(null, false, false, false, location); 发送http请求,返回一个User对象,User中包含很多的属性.然后保存此user对象到SharedPreferences中.

从下图可以看出user方法的调用框架.

<!--StartFragment -->
<!--StartFragment -->
如何返回一个Exception:"com.joelapenna.foursquare.error.FoursquareCredentialsException: HTTP/1.1 401 Unauthorized",表示用户名和密码错误.
如果用户名和密码都正确则还要保存storeUser(editor, user);对象到sharedPreferences中.以便下次不用输入直接进入. 接下来再onPostExecute方法中处理返回的Result.  今天写到这里该下班了.呵呵....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值