最近学习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. 今天写到这里该下班了.呵呵....
分享到:
相关推荐
【Foursquare源码分析】 Foursquare是一款流行的社交网络应用,主要功能是让用户发现周围的地点、分享自己的位置以及提供个性化的本地推荐。其源码分析可以帮助我们深入了解移动应用开发,特别是与地理位置服务相关...
【Android版Foursquare源码解析】 Foursquare是一款流行的社交网络应用,它允许用户“签到”到各个地点,并与朋友分享他们的行踪。在Android平台上,Foursquare的源代码提供了深入理解移动应用开发的宝贵资源,尤其...
通过foursquare源码的研究,我们可以深入理解其背后的设计理念和技术实现,从而在自己的开发工作中借鉴和学习。 首先,我们要明确LBS的基本概念。LBS是指通过定位技术获取用户实时地理位置,并以此为基础提供各种...
通过研究这份源代码,开发者不仅能学习到Android开发的基础知识,还能掌握高级特性,如网络优化、性能提升和用户体验设计。同时,对于想要深入理解foursquare应用工作原理的开发者来说,这是一份不可多得的学习材料...
它包含了10个经过实践验证的开源应用,其中特别提到了connectbot和foursquare这两个项目的源码,使得开发者可以直接研究和学习这些应用的实现细节。 首先,让我们详细了解一下connectbot。Connectbot是一款Android...
foursquared是一款基于地理位置服务(LBS,Location-Based Services)的应用,由Foursquare公司开发,它允许用户“签到”到他们所在的地点,并与朋友分享这些信息。这款应用结合了社交网络、游戏化元素以及本地商家...
5. **OAuth认证**:用户登录时,Foursquared会使用OAuth协议,安全地处理用户授权,确保应用可以代表用户访问Foursquare服务。 6. **数据缓存与离线功能**:为了提高用户体验,应用可能采用SQLite数据库或者Room库...
随着移动互联网的飞速发展,Android作为最受欢迎的移动操作系统之一,其开源特性吸引了众多开发者投身其中。为了帮助开发者更好地理解和掌握Android开发的关键技术和实践技巧,以下将详细介绍十个值得关注的Android...
1. "Foursquare_cut_one_day.pkl":这可能是从Foursquare数据集中提取的一天用户活动数据,通常用于训练和测试推荐算法。 2. "train.py":这是Python脚本,很可能用于训练DeepMove或其他模型。 3. "data_pre.py":...
6. **Foursquare**:Foursquare的Android应用源码,展示了地理位置服务、社交网络集成、地图API使用等复杂功能的实现。 7. **jwood-standup-timer-v1.4-1-g91940ca.zip**:这可能是一个站立会议计时器应用,包含了...
【标题解析】 "Foursquared" 是一个基于 Java 开发的项目,它是...深入研究 Foursquared 项目,不仅可以提升 Java 编程技能,还可以了解如何利用 Foursquare 平台进行创新开发,以及如何构建和维护一个复杂的软件项目。
深入研究这个项目,我们可以学到如何利用Google Maps API进行地图集成,如何处理用户的位置信息,以及如何使用SQLite或Firebase等数据库存储和检索数据。同时,项目可能还涉及了网络请求(如使用Retrofit或Volley库...