这是基于地理位置分享的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中的使用,包含地图申请、初始化、定位、搜索的范围计算等。