基于地理位置的Android App-我去 开发技术记录(一:结构)

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

原文地址:https://www.cnblogs.com/yctm/p/5595381.html