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

  • 相关阅读:
    LR12_IE11报错,闪退
    loadrunner11无法启动IE9
    启动数据库失败
    测试代码
    python中的JSON(1)
    文件和异常(二)
    文件和异常(一)
    类(三)
    类(二)
    初识类(一)
  • 原文地址:https://www.cnblogs.com/yctm/p/5595381.html
Copyright © 2020-2023  润新知