实战 QQ demo源码(本例中有该应用)
服务器端下载:http://download.csdn.net/download/knight_black_bob/9822551
android eclipse 版:http://download.csdn.net/download/knight_black_bob/9822553
android stdio 版本:http://download.csdn.net/download/knight_black_bob/9822556
运行结果:
日志打印:
流程图:
以上为eventbus 使用,下面可以作为正常逻辑
1
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mBaseView = LayoutInflater.from(getActivity()).inflate(R.layout.friendship_list_fragment, null); initUtils(); initView(mBaseView); initListeners(); EventBus.getDefault().register( this ); FriendshipUserRequest.getFriendshipUserFromWeb(user.getId()); return mBaseView; }
2
public class FriendshipUserRequest { public static void getFriendshipUserFromWeb(long userId ){ GsonRequest<QueryResultJson> gsonRequest = new GsonRequest<QueryResultJson>( Constants.friendship_url+ userId, QueryResultJson.class, new Response.Listener<QueryResultJson>() { @Override public void onResponse(QueryResultJson response) { JsonElement obj = response.retdata; if (obj != null && response.retcode == 200) { Log.e("baoyou","obj.toString() == "+ obj.toString()); FriendshipUserEntity resultjson = JsonParser.parseDateJson(obj.toString(), FriendshipUserEntity.class); FriendshipUserHttpManager.getFriendshipUserFromWeb(resultjson); }else{ } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) ; Volley.newRequestQueue(MyApplication.newInstance()).add(gsonRequest); } }
3
public class FriendshipUserHttpManager { public static void getFriendshipUserFromWeb( FriendshipUserEntity item){ List<FriendshipUserEntity> list = new ArrayList<FriendshipUserEntity>(); list.add(item); FriendshipUserHttpEvent dbEvent = new FriendshipUserHttpEvent(); dbEvent.status = list.size() == 0? RequestStatus.HTTP_NONE: RequestStatus.HTTP_SUCCESS; dbEvent.mDataList = list; Log.e("baoyou", "--"+list.size() + list.toString()); EventBus.getDefault().post(dbEvent); } }
4.
public void onEventMainThread(RequestEvent dbEvent) { Log.e("baoyou", "-- event ==================" ); if (dbEvent instanceof FriendshipUserHttpEvent) { Log.e("baoyou", "-- event http ==================" ); FriendshipUserHttpEvent event = (FriendshipUserHttpEvent) dbEvent; switch (dbEvent.status) { case HTTP_NONE: break; case HTTP_SUCCESS: { FriendshipUserEntity item = event.mDataList.get(0); userDB.deleteAll(); friendShipDB.deleteAll(); for (UserEntity ue : item.userList) { userDB.saveOrUpdate(ue); } for (FriendShipEntity fse : item.friendShipList) { friendShipDB.saveOrUpdate(fse); } FriendShipDBManager.getAllFromDB(friendShipDB); } break; default: break; } } @Override public void onDestroy() { EventBus.getDefault().unregister( this ); super.onDestroy(); }
5.
public class FriendShipDBManager { public static void getAllFromDB(FriendShipDB friendShipDB){ List<FriendShipEntity> list = friendShipDB.getAll(); FriendShipDBEvent dbEvent = new FriendShipDBEvent(); dbEvent.status = list.size() == 0? RequestStatus.DB_NONE: RequestStatus.DB_SUCCESS; dbEvent.mDataList = list; EventBus.getDefault().post(dbEvent); } }
6.
else if (dbEvent instanceof FriendShipDBEvent) { Log.e("baoyou", "-- event db ==================" ); FriendShipDBEvent event = (FriendShipDBEvent) dbEvent; switch (dbEvent.status) { case DB_NONE: break; case DB_SUCCESS: { List<FriendShipEntity> list = event.mDataList; List<FriendShips> dataList = new ArrayList<FriendShips>(); for (FriendShipEntity fs : list) { UserEntity userEntityByIndex = null; if (fs.getUserId() != 0) userEntityByIndex = userDB.getEntityById(fs.getUserId() + ""); FriendShips item = new FriendShips(); item.setId(fs.getId()); item.setUserSrc(fs.getUserSrc()); item.setParentId(fs.getParentId()); item.setName(fs.getName()); if (userEntityByIndex != null) item.setName(userEntityByIndex.getNickName()); item.setUserId(fs.getUserId()); if (userEntityByIndex != null) item.setPhoto(userEntityByIndex.getPhoto()); dataList.add(item); } for (FriendShips fs : dataList) { if (fs.getParentId() == 0) { long id = fs.getId(); List<FriendShips> childs = new ArrayList<FriendShips>(); for (FriendShips fs2 : dataList) { if (id == fs2.getParentId()) { childs.add(fs2); } } fs.setChilds(childs); mDataList.add(fs); } } mAdapter.notifyDataSetChanged(); }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
为了实现良好的性能和响应速度,开发者可能还需要考虑数据缓存策略,如使用Room Persistence Library,这是Android官方推荐的SQLite数据库抽象层,提供了更高级别的API,简化了数据库操作。 最后,测试是保证应用...
4. **数据存储**:Android应用可能需要保存用户的登录状态、偏好设置等信息,可以使用SharedPreferences进行轻量级数据存储,或者SQLite数据库进行结构化数据的持久化。 5. **多线程处理**:为了防止网络请求阻塞...
3. **数据存储**:Android的数据存储方式,如SharedPreferences、SQLite数据库、文件系统和ContentProvider的使用,可能是书中讨论的重要部分。 4. **网络编程**:Android应用中的网络通信,包括HttpURLConnection...
GSON和ActiveAndroid处理数据序列化和持久化,Butterknife简化UI交互,EventBus优化组件通信,而Image Loader则负责高效地加载和管理图片资源。理解并熟练运用这些库,能显著提高Android应用的质量和开发效率。
Android框架体系架构是Android开发中的核心内容,涵盖了UI晋升、组件内核、IPC(Inter-Process Communication,进程间通信)以及数据持久化等关键知识点。本文将详细介绍这些知识,以此来深入理解Android平台的运作...
- **SQLite数据库**:Android原生的SQLite数据库可能被用于存储用户数据,如登录信息、收藏等,方便离线访问。 - **Room Persistence Library**:OsChina可能采用了Google的Room库,它是对SQLite的现代封装,提供...
3. **数据存储**:Android提供了SQLite数据库用于本地数据存储,郝玉龙的教程可能涵盖如何创建数据库、操作表、查询数据等,还有可能涉及SharedPreferences和File的使用。 4. **网络编程**:在移动应用开发中,网络...
6. 事件总线(如RxBus或EventBus):用于组件间的通信,例如在添加或删除备忘录后通知UI更新。 四、学习要点 通过研究这个源码,你可以学习到以下Android开发的关键技术: 1. 使用布局管理器(如LinearLayout、...
3. **数据存储**:Android提供了SQLite数据库、SharedPreferences、ContentProvider等多种数据存储方式。源码中可能会包含数据库操作,如查询、插入、更新和删除数据的示例。 4. **异步处理与多线程**:Android应用...
此外,这个项目可能还涉及到了Android的权限管理、网络请求库(如Retrofit或OkHttp)、数据库操作(如SQLite)、事件总线(如EventBus)以及依赖注入框架(如Dagger2)等。这些都是现代Android应用开发中不可或缺的...
5. **数据存储**:可能使用SQLite数据库进行本地数据存储,或者使用Room库,它是Android官方推荐的数据库访问层解决方案,提供更友好的API。 6. **网络请求**:可能会使用OkHttp或Volley进行网络请求,获取和发送...
开发者可以通过源码研究,掌握如何在Android平台上实现这些功能,包括网络通信(如WebSocket、HTTP/HTTPS)、数据存储(SQLite、SharedPreference)、推送服务(如GCM/FCM)等。 3. **摇一摇功能**: - "摇一摇"是...
- 使用EventBus或RxBus:实现组件间的解耦通信,如通知界面刷新、状态变化等。 10. **测试**: - 单元测试:针对各个功能模块进行单元测试,确保代码质量。 - Espresso或Robolectric:进行UI自动化测试,检查...
2. SQLite数据库:在Android中,SQLite用于存储结构化的数据,如用户的登录信息、关注列表等。 3. ContentProvider:作为数据共享的接口,使得不同应用间的数据交换成为可能。 三、网络通信 1. Retrofit或OkHttp:...
总的来说,实现【Android二人聊天室】项目,开发者需要掌握Android网络编程、数据传输、UI设计、数据库操作等相关技术,并具备良好的编程实践和问题解决能力。通过这个项目,开发者不仅可以提升Android开发技能,还...
Android提供了多种数据存储方式,如SQLite数据库(05)、SharedPreferences、内部/外部存储以及最近流行的Room库。文件05可能涉及数据库操作,08可能介绍如何使用SharedPreferences来存储轻量级数据。 3. **网络...
1. **用户界面设计**:Android应用通常使用XML布局文件来构建UI,可能使用了诸如Activity、Fragment、View等组件,以及自定义View来实现独特的交互效果。此外,Material Design指南可能被遵循,以提供一致且现代的...
在Android中,模型通常包含与服务器交互的网络请求,本地SQLite数据库操作,文件系统读写等。开发者可以创建一个或多个模型类来封装这些功能,确保数据的获取和存储逻辑独立于视图和控制器,从而提高代码的可维护性...
1. **基础组件与UI设计**:Android应用程序的基础在于各种UI组件,如按钮、文本框、列表视图等。源代码中会包含如何布局、交互设计以及自定义控件的实现,这将帮助开发者了解如何创建用户友好的界面。 2. **数据...
常常设计到不同线程之间的通信,如下载图片完成后通知 UI线程更新UI,凡此类场景,无论使用哪一种具体的线程间通信方式(Handler/Message、Handler/post、基于接口的回调、基于多对多的观察者模式如EventBus等),其...