基於地理位置的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中的使用,包含地圖申請、初始化、定位、搜索的范圍計算等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM