这是基于地理位置分享的Android App,附上发布平台地址:
安智:http://www.anzhi.com/soft_2613436.html
应用宝:http://android.myapp.com/myapp/detail.htm?apkName=com.onemecould.mapwoqu
项目使用Android studio 开发,内部采用面向接口开发,infrastructure中封装接口调用,集成阿里云对象存储(OSS),支持服务端切换存储方式。app包中主要为业务逻辑、adapter、view.支持文字和图片的发布,可以选择本地图片或拍照。根据地理位置搜索分享信息,能收藏和评论分享内容,可打开地图分享信息,也可在地图中查看分享的地理位置。可修改个人资料,支持QQ和微博账号登录。
项目源代码结构:
MainApplication
程序入口,初始化,包含腾讯Bugly、Bmob、Universal Image Loader、友盟平台以及存储方案的获取:
@Override public void onCreate() { super.onCreate(); mContext = getApplicationContext(); initBugly(); initImageLoader(); Bmob.initialize(mContext, "appid"); BmobInstallation.getCurrentInstallation(mContext).save(); BmobPush.startWork(mContext); } //友盟平台配置 { PlatformConfig.setQQZone("appid","app_secret"); PlatformConfig.setSinaWeibo("appid","app_secret"); } //Bugly配置 private void initBugly(){ CrashReport.initCrashReport(getApplicationContext(),"app_id",false); } //上传时调用 public static void initUploadConfig(final InitUploadConfigListener listener){ //......省略...... }
infrastructure
接口层,封装所有请求操作,所有请求与数据返回通过回调处理。封装了返回的listener接口以及错误消息类用来统一接收数据和处理错误。
这里接口的使用是通过反射获取接口实例:
private Object createInterface(String name,Context context){ try { if(context!=null){ Constructor constructor=Class.forName(name).getConstructor(Context.class); Object instance=constructor.newInstance(mCurrentContext); return instance; } return Class.forName(name).newInstance(); }catch (NoSuchMethodException e){ e.printStackTrace(); }catch (InstantiationException e){ e.printStackTrace(); }catch (IllegalAccessException e){ e.printStackTrace(); }catch (ClassNotFoundException e){ e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); } return null; } public IUserInfoService createIUserInfo(){ String name=String.format("%1$s.%2$sUserInfoService",dataStoreBasicPackagePath,DB); Object dInterface=createInterface(name,mCurrentContext); if(dInterface!=null){ return (IUserInfoService)dInterface; } return null; }
createIUserInfo()中的dataStoreBasicPackagePath为包路径,DB用来区分接口,以后更换接口时只需要按照新的DB字符串创建接口类.
app层
包含业务逻辑与展示层,activity或fragment中调用infrastructure层接口,最后将数据显示。
整体来说,项目结构简单,对于初学者来说很好理解,项目中也没有涉及其他新的技术,下一篇继续讲解百度地图Api在android中的使用,包含地图申请、初始化、定位、搜索的范围计算等。