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

  • 相关阅读:
    最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离等问题
    暑假总结20160907
    数组指针和指针数组的区别
    Matlab GUI界面
    稀疏表示(sparse representation)和字典学习
    C++设计模式——策略模式
    volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域
    MultiByteToWideChar和WideCharToMultiByte用法详解
    MFC中Listbox控件的简单使用
    window.open("url?param="+paramvalue) 服务端 乱码问题解决
  • 原文地址:https://www.cnblogs.com/yctm/p/5595381.html
Copyright © 2020-2023  润新知