diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6fbe15766b6362a2d31add3de93739eb5567b87a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+gradle.xml
+
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..ab4cdc2cff368a6c619dba978a7d64d2a1295be8
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Elove
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96cc43efa6a0885098044e976cd780bb42c68a70
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7bedf3377d40335424fd605124d4761390218bb
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..76e722ccd2e88b1795b1d0c19e6f45de8c57eccf
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d19981032aa01b060f5a568641d7a8840cc90dc
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..058d10b06c55bd200be7cdd0f4a48ee6cac3b97f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f68460d8b38ac04e3a3224d7c79ef719b1991a9
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/.gitignore b/JQ_ELOVE/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..796b96d1c402326528b4ba3c12ee9d92d0e212e9
--- /dev/null
+++ b/JQ_ELOVE/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/JQ_ELOVE/.idea/.name b/JQ_ELOVE/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..7921640ab760462942898d060bd7c5f5fc6feb6b
--- /dev/null
+++ b/JQ_ELOVE/.idea/.name
@@ -0,0 +1 @@
+JQ_ELOVE
\ No newline at end of file
diff --git a/JQ_ELOVE/.idea/compiler.xml b/JQ_ELOVE/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96cc43efa6a0885098044e976cd780bb42c68a70
--- /dev/null
+++ b/JQ_ELOVE/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/.idea/copyright/profiles_settings.xml b/JQ_ELOVE/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7bedf3377d40335424fd605124d4761390218bb
--- /dev/null
+++ b/JQ_ELOVE/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/.idea/encodings.xml b/JQ_ELOVE/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..97626ba45445dc9f3afa66e6a149914dc39e3df6
--- /dev/null
+++ b/JQ_ELOVE/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/.idea/misc.xml b/JQ_ELOVE/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6eabdcd6ca3b00fce8be8c95fb1c2443e8bc3ee6
--- /dev/null
+++ b/JQ_ELOVE/.idea/misc.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/.idea/workspace.xml b/JQ_ELOVE/.idea/workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4157fb9463e9d53806a1377b8222d4948313a3d6
--- /dev/null
+++ b/JQ_ELOVE/.idea/workspace.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1465279585854
+
+ 1465279585854
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/build.gradle b/JQ_ELOVE/build.gradle
new file mode 100644
index 0000000000000000000000000000000000000000..061ecda15f333b1e53351c8f0146e06a6ae0368e
--- /dev/null
+++ b/JQ_ELOVE/build.gradle
@@ -0,0 +1,140 @@
+apply plugin: 'com.android.application'
+
+def releaseTime() {
+ return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
+}
+
+android {
+
+ signingConfigs {
+ standard {
+ keyAlias 'standard'
+ keyPassword 'android'
+ storeFile file('D:/appsign/android.jks')
+ storePassword 'android'
+ }
+ }
+ aaptOptions.cruncherEnabled = false
+ aaptOptions.useNewCruncher = false
+ compileSdkVersion 25
+ buildToolsVersion "25.0.2"
+ defaultConfig {
+ applicationId "com.jiuqi.elove"
+ minSdkVersion 17
+ targetSdkVersion 25
+ versionCode 34
+ versionName "3.2.1"
+// // dex突破65535的限制
+ multiDexEnabled true
+ manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]
+
+ ndk {
+ abiFilters "armeabi"
+ }
+ }
+ productFlavors {
+ xiaomi {}
+ _360 {}
+ baidu {}
+ wandoujia {}
+ official {}
+ yingyongbao {}
+ anzhi {}
+ huawei {}
+
+ }
+ productFlavors.all {
+ flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
+ }
+
+ buildTypes {
+ release {
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.standard
+// buildConfigField "boolean", "LOG_DEBUG", "false"
+// minifyEnabled true
+ zipAlignEnabled true
+ // 移除无用的resource文件
+ shrinkResources false
+ applicationVariants.all { variant ->
+ variant.outputs.each { output ->
+ def outputFile = output.outputFile
+ if (outputFile != null && outputFile.name.endsWith('.apk')) {
+ // 输出apk名称为elove_v1.0_2015-01-15_wandoujia.apk
+ def fileName = "elove_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
+ output.outputFile = new File(outputFile.parent, fileName)
+ }
+ }
+ }
+ }
+ debug {
+ signingConfig signingConfigs.standard
+ }
+ }
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']//就是你存放so文件夹的不同cup目录地址
+ }
+ }
+ configurations {
+// all*.exclude group: 'com.android.support', module: 'support-v4'
+// //解决资源加载器解压时重复的问题java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class
+// all*.exclude group: 'com.android.support', module: 'support-annotations'
+ }
+ dexOptions {
+ javaMaxHeapSize "4g"
+ }
+// 趣拍需要
+ //其它配置
+ packagingOptions {
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/NOTICE'
+ }
+
+ repositories {
+ maven { url "https://jitpack.io" }
+ }
+
+ repositories { flatDir { dirs 'libs' } }
+
+}
+
+dependencies {
+ compile fileTree(include: ['*.jar'], dir: 'libs')
+ compile project(path: ':easeui')
+ compile files('libs/jpush-android-2.1.7.jar')
+ compile files('libs/alipaySdk-20160825.jar')
+ compile project(':Qupaisdk-release')
+ compile(name: 'newsagent', ext: 'aar')
+ compile(name: 'adagent', ext: 'aar')
+ compile 'com.android.support:appcompat-v7:25.3.1'
+ compile 'com.android.support:support-v4:25.3.1'
+ compile 'com.android.support:recyclerview-v7:25.3.1'
+ compile 'com.android.support:design:25.3.1'
+ compile 'com.android.support:cardview-v7:25.3.1'
+ compile 'com.android.support:multidex:1.0.1'
+// compile 'com.android.support.constraint:constraint-layout:1.0.2'
+ compile 'com.google.code.gson:gson:2.7'
+ compile 'com.baoyz.actionsheet:library:1.1.5'
+ compile 'com.umeng.analytics:analytics:latest.integration'
+ compile 'com.fasterxml.jackson.core:jackson-databind:2.6.4'
+ compile 'com.google.dagger:dagger-compiler:2.0.1'
+ compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
+ compile 'com.google.code.findbugs:jsr305:3.0.0'
+ compile 'com.github.PhilJay:MPAndroidChart:v2.1.6'
+ compile 'com.huxq17.android:SwipeCardsView:1.3.4'
+ compile 'com.jakewharton:butterknife:8.6.0'
+ compile 'com.gyf.barlibrary:barlibrary:2.3.0'
+ compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'
+ compile 'de.hdodenhof:circleimageview:2.1.0'
+ compile 'com.squareup.okhttp3:okhttp:3.9.0'
+ compile 'com.squareup.okhttp:okhttp:2.4.0'
+ compile 'org.greenrobot:eventbus:3.0.0'
+ compile 'com.contrarywind:Android-PickerView:3.2.5'
+ compile 'com.github.pinguo-zhouwei:MZBannerView:v2.0.0'
+ compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.3@aar'
+ compile 'io.reactivex:rxjava:1.0.14'
+ compile 'com.google.android:flexbox:0.2.6'
+ testCompile 'junit:junit:4.12'
+ annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
+}
diff --git a/JQ_ELOVE/gradle/wrapper/gradle-wrapper.jar b/JQ_ELOVE/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659
Binary files /dev/null and b/JQ_ELOVE/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/JQ_ELOVE/gradle/wrapper/gradle-wrapper.properties b/JQ_ELOVE/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..122a0dca2e800b3ccf474321fc5e63551f507d29
--- /dev/null
+++ b/JQ_ELOVE/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Dec 28 10:00:20 PST 2015
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
diff --git a/JQ_ELOVE/gradlew b/JQ_ELOVE/gradlew
new file mode 100644
index 0000000000000000000000000000000000000000..9d82f78915133e1c35a6ea51252590fb38efac2f
--- /dev/null
+++ b/JQ_ELOVE/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/JQ_ELOVE/gradlew.bat b/JQ_ELOVE/gradlew.bat
new file mode 100644
index 0000000000000000000000000000000000000000..8a0b282aa6885fb573c106b3551f7275c5f17e8e
--- /dev/null
+++ b/JQ_ELOVE/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/JQ_ELOVE/libs/SocialSDK_QQZone_3.jar b/JQ_ELOVE/libs/SocialSDK_QQZone_3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a080eb442f60b2ff8e8e380cdf41daa528588cae
Binary files /dev/null and b/JQ_ELOVE/libs/SocialSDK_QQZone_3.jar differ
diff --git a/JQ_ELOVE/libs/SocialSDK_Sina.jar b/JQ_ELOVE/libs/SocialSDK_Sina.jar
new file mode 100644
index 0000000000000000000000000000000000000000..58f7e38c0525424304cefa6a6f6c4c6ca6fe005f
Binary files /dev/null and b/JQ_ELOVE/libs/SocialSDK_Sina.jar differ
diff --git a/JQ_ELOVE/libs/SocialSDK_WeiXin_1.jar b/JQ_ELOVE/libs/SocialSDK_WeiXin_1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0cd8a5ce23a91c5f71315b611dcd6cbddfb42ac9
Binary files /dev/null and b/JQ_ELOVE/libs/SocialSDK_WeiXin_1.jar differ
diff --git a/JQ_ELOVE/libs/SocialSDK_WeiXin_2.jar b/JQ_ELOVE/libs/SocialSDK_WeiXin_2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..17c50346ed2a832842ef1c02d96b41a2c6c270bc
Binary files /dev/null and b/JQ_ELOVE/libs/SocialSDK_WeiXin_2.jar differ
diff --git a/JQ_ELOVE/libs/adagent.aar b/JQ_ELOVE/libs/adagent.aar
new file mode 100644
index 0000000000000000000000000000000000000000..813e2d918994972f8894f7907569a23bb3de6da3
Binary files /dev/null and b/JQ_ELOVE/libs/adagent.aar differ
diff --git a/JQ_ELOVE/libs/alipaySdk-20160825.jar b/JQ_ELOVE/libs/alipaySdk-20160825.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e74f32a0fcd43ca9c70c0973d43aca9a9ba36c8a
Binary files /dev/null and b/JQ_ELOVE/libs/alipaySdk-20160825.jar differ
diff --git a/JQ_ELOVE/libs/aliyun-oss-sdk-android-2.2.0.jar b/JQ_ELOVE/libs/aliyun-oss-sdk-android-2.2.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a3414a9e985a07a12430ad1f2051d79d7f422cdf
Binary files /dev/null and b/JQ_ELOVE/libs/aliyun-oss-sdk-android-2.2.0.jar differ
diff --git a/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_base_v4_5_2.so b/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_base_v4_5_2.so
new file mode 100644
index 0000000000000000000000000000000000000000..31df3f96f4727a47a1f6576688bc6ee6b92a162b
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_base_v4_5_2.so differ
diff --git a/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_map_v4_5_2.so b/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_map_v4_5_2.so
new file mode 100644
index 0000000000000000000000000000000000000000..d9b6825a6e8dda9afd3d2cbfbde5e3c3924a9d5b
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libBaiduMapSDK_map_v4_5_2.so differ
diff --git a/JQ_ELOVE/libs/armeabi/libjpush217.so b/JQ_ELOVE/libs/armeabi/libjpush217.so
new file mode 100644
index 0000000000000000000000000000000000000000..34d56e71fae3e099f1f3bac7149dbb64b5dfb669
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libjpush217.so differ
diff --git a/JQ_ELOVE/libs/armeabi/liblocSDK7b.so b/JQ_ELOVE/libs/armeabi/liblocSDK7b.so
new file mode 100644
index 0000000000000000000000000000000000000000..1a9a34ae05e3589eb54b20946232dc59a5c8faa5
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/liblocSDK7b.so differ
diff --git a/JQ_ELOVE/libs/armeabi/libqupai-media-jni.so b/JQ_ELOVE/libs/armeabi/libqupai-media-jni.so
new file mode 100644
index 0000000000000000000000000000000000000000..d75a7c1f8573fff5e6e1c3780451cb0d721d5af2
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libqupai-media-jni.so differ
diff --git a/JQ_ELOVE/libs/armeabi/libqupai-media-thirdparty.so b/JQ_ELOVE/libs/armeabi/libqupai-media-thirdparty.so
new file mode 100644
index 0000000000000000000000000000000000000000..d6cbe53f94cc1a6ad12bec830022ac7efc2e853f
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libqupai-media-thirdparty.so differ
diff --git a/JQ_ELOVE/libs/armeabi/libweibosdkcore.so b/JQ_ELOVE/libs/armeabi/libweibosdkcore.so
new file mode 100644
index 0000000000000000000000000000000000000000..94192f93213dbbe274d8d30891e9a0b467e8055a
Binary files /dev/null and b/JQ_ELOVE/libs/armeabi/libweibosdkcore.so differ
diff --git a/JQ_ELOVE/libs/fastjson-1.1.34.android.jar b/JQ_ELOVE/libs/fastjson-1.1.34.android.jar
new file mode 100644
index 0000000000000000000000000000000000000000..bf50c46fe88be8b0315f5b2a079414f835608f5e
Binary files /dev/null and b/JQ_ELOVE/libs/fastjson-1.1.34.android.jar differ
diff --git a/JQ_ELOVE/libs/jpush-android-2.1.7.jar b/JQ_ELOVE/libs/jpush-android-2.1.7.jar
new file mode 100644
index 0000000000000000000000000000000000000000..dc17b8096106fc06d67ed9b8edb95516a7a08202
Binary files /dev/null and b/JQ_ELOVE/libs/jpush-android-2.1.7.jar differ
diff --git a/JQ_ELOVE/libs/mta-sdk-1.6.2.jar b/JQ_ELOVE/libs/mta-sdk-1.6.2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..49b77879d8fab493bfe0ee21eb6aacc1cb18e6f0
Binary files /dev/null and b/JQ_ELOVE/libs/mta-sdk-1.6.2.jar differ
diff --git a/JQ_ELOVE/libs/newsagent.aar b/JQ_ELOVE/libs/newsagent.aar
new file mode 100644
index 0000000000000000000000000000000000000000..bcc169a6e214eca6ea05b359065d19c15520ca22
Binary files /dev/null and b/JQ_ELOVE/libs/newsagent.aar differ
diff --git a/JQ_ELOVE/libs/open_sdk_r5509.jar b/JQ_ELOVE/libs/open_sdk_r5509.jar
new file mode 100644
index 0000000000000000000000000000000000000000..550530a70e832f12469e72da856ce94498ce9ee3
Binary files /dev/null and b/JQ_ELOVE/libs/open_sdk_r5509.jar differ
diff --git a/JQ_ELOVE/libs/umeng_social_sdk.jar b/JQ_ELOVE/libs/umeng_social_sdk.jar
new file mode 100644
index 0000000000000000000000000000000000000000..96beedabaa53dcea8dd6f937e9972c77b56a64dc
Binary files /dev/null and b/JQ_ELOVE/libs/umeng_social_sdk.jar differ
diff --git a/JQ_ELOVE/libs/weiboSDKCore_3.1.4.jar b/JQ_ELOVE/libs/weiboSDKCore_3.1.4.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6300cf2e27b759e623863dc76d3c470877dc065c
Binary files /dev/null and b/JQ_ELOVE/libs/weiboSDKCore_3.1.4.jar differ
diff --git a/JQ_ELOVE/libs/zxing.jar b/JQ_ELOVE/libs/zxing.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e7b7afc79e4136c58854f435b5a833b4a766dc00
Binary files /dev/null and b/JQ_ELOVE/libs/zxing.jar differ
diff --git a/JQ_ELOVE/local.properties b/JQ_ELOVE/local.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e9b05d2c0d23b1bd183be49ec3611c1e6178e418
--- /dev/null
+++ b/JQ_ELOVE/local.properties
@@ -0,0 +1,11 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+#Tue Jun 07 14:06:25 CST 2016
+sdk.dir=D\:\\sdk
diff --git a/JQ_ELOVE/proguard-rules.pro b/JQ_ELOVE/proguard-rules.pro
new file mode 100644
index 0000000000000000000000000000000000000000..64a93c368d0111eb3bde2c0058349cad7656b0be
--- /dev/null
+++ b/JQ_ELOVE/proguard-rules.pro
@@ -0,0 +1,53 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in F:\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+-keep class com.hyphenate.** {*;}
+-dontwarn com.hyphenate.**
+-keep class com.baidu.** {*;}
+-keep class vi.com.** {*;}
+-dontwarn com.baidu.**
+
+-dontoptimize
+-dontpreverify
+
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+
+#==================gson==========================
+-dontwarn com.google.**
+-keep class com.google.gson.** {*;}
+
+#==================protobuf======================
+-dontwarn com.google.**
+-keep class com.google.protobuf.** {*;}
+
+-keep class com.alibaba.sdk.android.oss.** { *; }
+-dontwarn okio.**
+-dontwarn org.apache.commons.codec.binary.**
+
+-libraryjars libs/alipaySDK-20160825.jar
+
+-keep class com.alipay.android.app.IAlixPay{*;}
+-keep class com.alipay.android.app.IAlixPay$Stub{*;}
+-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
+-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
+-keep class com.alipay.sdk.app.PayTask{ public *;}
+-keep class com.alipay.sdk.app.AuthTask{ public *;}
+
+-keep class com.tencent.mm.sdk.** {
+ *;
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/androidTest/java/cn/com/jiuqi/elove/ApplicationTest.java b/JQ_ELOVE/src/androidTest/java/cn/com/jiuqi/elove/ApplicationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0cd412a42b829951c28198ab7fb7e28ebc0050b4
--- /dev/null
+++ b/JQ_ELOVE/src/androidTest/java/cn/com/jiuqi/elove/ApplicationTest.java
@@ -0,0 +1,13 @@
+package cn.com.jiuqi.elove;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/AndroidManifest.xml b/JQ_ELOVE/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5992f9bf88b0ec91cc05c4aaa4c19b351712c80
--- /dev/null
+++ b/JQ_ELOVE/src/main/AndroidManifest.xml
@@ -0,0 +1,879 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/assets/area.json b/JQ_ELOVE/src/main/assets/area.json
new file mode 100644
index 0000000000000000000000000000000000000000..42bc6f79a7b2ac204834d6e29b1f66541187522e
--- /dev/null
+++ b/JQ_ELOVE/src/main/assets/area.json
@@ -0,0 +1,2831 @@
+[{"AreaID":110114, "name":"昌平区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110115, "name":"大兴区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110116, "name":"怀柔区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110117, "name":"平谷区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110108, "name":"海淀区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110111, "name":"房山区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110107, "name":"石景山区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110112, "name":"通州区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110113, "name":"顺义区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110109, "name":"门头沟区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110106, "name":"丰台区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110105, "name":"朝阳区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110118, "name":"密云区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110119, "name":"延庆区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110102, "name":"西城区", "CityID":110100, "AreaSort":110000},
+{"AreaID":110101, "name":"东城区", "CityID":110100, "AreaSort":110000},
+{"AreaID":120102, "name":"河东区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120103, "name":"河西区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120118, "name":"静海区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120104, "name":"南开区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120117, "name":"宁河区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120105, "name":"河北区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120101, "name":"和平区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120112, "name":"津南区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120111, "name":"西青区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120110, "name":"东丽区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120116, "name":"滨海新区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120106, "name":"红桥区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120115, "name":"宝坻区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120114, "name":"武清区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120113, "name":"北辰区", "CityID":120100, "AreaSort":120000},
+{"AreaID":120225, "name":"蓟县", "CityID":120100, "AreaSort":120000},
+{"AreaID":131128, "name":"阜城县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131102, "name":"桃城区", "CityID":131100, "AreaSort":131100},
+{"AreaID":131126, "name":"故城县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131181, "name":"冀州市", "CityID":131100, "AreaSort":131100},
+{"AreaID":131127, "name":"景县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131124, "name":"饶阳县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131125, "name":"安平县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131122, "name":"武邑县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131123, "name":"武强县", "CityID":131100, "AreaSort":131100},
+{"AreaID":131182, "name":"深州市", "CityID":131100, "AreaSort":131100},
+{"AreaID":131121, "name":"枣强县", "CityID":131100, "AreaSort":131100},
+{"AreaID":130202, "name":"路南区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130203, "name":"路北区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130224, "name":"滦南县", "CityID":130200, "AreaSort":130200},
+{"AreaID":130225, "name":"乐亭县", "CityID":130200, "AreaSort":130200},
+{"AreaID":130223, "name":"滦县", "CityID":130200, "AreaSort":130200},
+{"AreaID":130283, "name":"迁安市", "CityID":130200, "AreaSort":130200},
+{"AreaID":130229, "name":"玉田县", "CityID":130200, "AreaSort":130200},
+{"AreaID":130281, "name":"遵化市", "CityID":130200, "AreaSort":130200},
+{"AreaID":130208, "name":"丰润区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130209, "name":"曹妃甸区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130227, "name":"迁西县", "CityID":130200, "AreaSort":130200},
+{"AreaID":130207, "name":"丰南区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130204, "name":"古冶区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130205, "name":"开平区", "CityID":130200, "AreaSort":130200},
+{"AreaID":130702, "name":"桥东区", "CityID":130700, "AreaSort":130700},
+{"AreaID":130705, "name":"宣化区", "CityID":130700, "AreaSort":130700},
+{"AreaID":130706, "name":"下花园区", "CityID":130700, "AreaSort":130700},
+{"AreaID":130731, "name":"涿鹿县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130703, "name":"桥西区", "CityID":130700, "AreaSort":130700},
+{"AreaID":130730, "name":"怀来县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130733, "name":"崇礼县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130728, "name":"怀安县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130732, "name":"赤城县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130727, "name":"阳原县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130726, "name":"蔚县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130725, "name":"尚义县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130724, "name":"沽源县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130723, "name":"康保县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130722, "name":"张北县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130721, "name":"宣化县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130729, "name":"万全县", "CityID":130700, "AreaSort":130700},
+{"AreaID":130532, "name":"平乡县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130533, "name":"威县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130530, "name":"新河县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130531, "name":"广宗县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130521, "name":"邢台县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130522, "name":"临城县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130523, "name":"内丘县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130524, "name":"柏乡县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130525, "name":"隆尧县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130526, "name":"任县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130582, "name":"沙河市", "CityID":130500, "AreaSort":130500},
+{"AreaID":130527, "name":"南和县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130581, "name":"南宫市", "CityID":130500, "AreaSort":130500},
+{"AreaID":130528, "name":"宁晋县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130534, "name":"清河县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130529, "name":"巨鹿县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130535, "name":"临西县", "CityID":130500, "AreaSort":130500},
+{"AreaID":130503, "name":"桥西区", "CityID":130500, "AreaSort":130500},
+{"AreaID":130502, "name":"桥东区", "CityID":130500, "AreaSort":130500},
+{"AreaID":130302, "name":"海港区", "CityID":130300, "AreaSort":130300},
+{"AreaID":130306, "name":"抚宁区", "CityID":130300, "AreaSort":130300},
+{"AreaID":130324, "name":"卢龙县", "CityID":130300, "AreaSort":130300},
+{"AreaID":130321, "name":"青龙满族自治县", "CityID":130300, "AreaSort":130300},
+{"AreaID":130304, "name":"北戴河区", "CityID":130300, "AreaSort":130300},
+{"AreaID":130322, "name":"昌黎县", "CityID":130300, "AreaSort":130300},
+{"AreaID":130303, "name":"山海关区", "CityID":130300, "AreaSort":130300},
+{"AreaID":131023, "name":"永清县", "CityID":131000, "AreaSort":131000},
+{"AreaID":131024, "name":"香河县", "CityID":131000, "AreaSort":131000},
+{"AreaID":131003, "name":"广阳区", "CityID":131000, "AreaSort":131000},
+{"AreaID":131022, "name":"固安县", "CityID":131000, "AreaSort":131000},
+{"AreaID":131081, "name":"霸州市", "CityID":131000, "AreaSort":131000},
+{"AreaID":131082, "name":"三河市", "CityID":131000, "AreaSort":131000},
+{"AreaID":131028, "name":"大厂回族自治县", "CityID":131000, "AreaSort":131000},
+{"AreaID":131002, "name":"安次区", "CityID":131000, "AreaSort":131000},
+{"AreaID":131025, "name":"大城县", "CityID":131000, "AreaSort":131000},
+{"AreaID":131026, "name":"文安县", "CityID":131000, "AreaSort":131000},
+{"AreaID":130608, "name":"清苑区", "CityID":130600, "AreaSort":130600},
+{"AreaID":130609, "name":"徐水区", "CityID":130600, "AreaSort":130600},
+{"AreaID":130681, "name":"涿州市", "CityID":130600, "AreaSort":130600},
+{"AreaID":130635, "name":"蠡县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130607, "name":"满城区", "CityID":130600, "AreaSort":130600},
+{"AreaID":130636, "name":"顺平县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130606, "name":"莲池区", "CityID":130600, "AreaSort":130600},
+{"AreaID":130624, "name":"阜平县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130683, "name":"安国市", "CityID":130600, "AreaSort":130600},
+{"AreaID":130633, "name":"易县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130623, "name":"涞水县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130682, "name":"定州市", "CityID":130600, "AreaSort":130600},
+{"AreaID":130634, "name":"曲阳县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130629, "name":"容城县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130684, "name":"高碑店市", "CityID":130600, "AreaSort":130600},
+{"AreaID":130602, "name":"竞秀区", "CityID":130600, "AreaSort":130600},
+{"AreaID":130628, "name":"高阳县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130637, "name":"博野县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130627, "name":"唐县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130638, "name":"雄县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130626, "name":"定兴县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130631, "name":"望都县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130632, "name":"安新县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130630, "name":"涞源县", "CityID":130600, "AreaSort":130600},
+{"AreaID":130107, "name":"井陉矿区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130108, "name":"裕华区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130105, "name":"新华区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130184, "name":"新乐市", "CityID":130100, "AreaSort":130100},
+{"AreaID":130183, "name":"晋州市", "CityID":130100, "AreaSort":130100},
+{"AreaID":130109, "name":"藁城区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130181, "name":"辛集市", "CityID":130100, "AreaSort":130100},
+{"AreaID":130104, "name":"桥西区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130102, "name":"长安区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130133, "name":"赵县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130132, "name":"元氏县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130123, "name":"正定县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130131, "name":"平山县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130126, "name":"灵寿县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130130, "name":"无极县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130125, "name":"行唐县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130111, "name":"栾城区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130110, "name":"鹿泉区", "CityID":130100, "AreaSort":130100},
+{"AreaID":130121, "name":"井陉县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130128, "name":"深泽县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130127, "name":"高邑县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130129, "name":"赞皇县", "CityID":130100, "AreaSort":130100},
+{"AreaID":130929, "name":"献县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130902, "name":"新华区", "CityID":130900, "AreaSort":130900},
+{"AreaID":130903, "name":"运河区", "CityID":130900, "AreaSort":130900},
+{"AreaID":130927, "name":"南皮县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130928, "name":"吴桥县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130926, "name":"肃宁县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130925, "name":"盐山县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130930, "name":"孟村回族自治县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130924, "name":"海兴县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130923, "name":"东光县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130983, "name":"黄骅市", "CityID":130900, "AreaSort":130900},
+{"AreaID":130922, "name":"青县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130984, "name":"河间市", "CityID":130900, "AreaSort":130900},
+{"AreaID":130921, "name":"沧县", "CityID":130900, "AreaSort":130900},
+{"AreaID":130981, "name":"泊头市", "CityID":130900, "AreaSort":130900},
+{"AreaID":130982, "name":"任丘市", "CityID":130900, "AreaSort":130900},
+{"AreaID":130828, "name":"围场满族蒙古族自治县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130822, "name":"兴隆县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130804, "name":"鹰手营子矿区", "CityID":130800, "AreaSort":130800},
+{"AreaID":130823, "name":"平泉县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130802, "name":"双桥区", "CityID":130800, "AreaSort":130800},
+{"AreaID":130821, "name":"承德县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130803, "name":"双滦区", "CityID":130800, "AreaSort":130800},
+{"AreaID":130826, "name":"丰宁满族自治县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130827, "name":"宽城满族自治县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130824, "name":"滦平县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130825, "name":"隆化县", "CityID":130800, "AreaSort":130800},
+{"AreaID":130430, "name":"邱县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130402, "name":"邯山区", "CityID":130400, "AreaSort":130400},
+{"AreaID":130428, "name":"肥乡县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130403, "name":"丛台区", "CityID":130400, "AreaSort":130400},
+{"AreaID":130429, "name":"永年县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130404, "name":"复兴区", "CityID":130400, "AreaSort":130400},
+{"AreaID":130434, "name":"魏县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130406, "name":"峰峰矿区", "CityID":130400, "AreaSort":130400},
+{"AreaID":130424, "name":"成安县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130433, "name":"馆陶县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130425, "name":"大名县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130481, "name":"武安市", "CityID":130400, "AreaSort":130400},
+{"AreaID":130432, "name":"广平县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130426, "name":"涉县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130431, "name":"鸡泽县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130427, "name":"磁县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130421, "name":"邯郸县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130435, "name":"曲周县", "CityID":130400, "AreaSort":130400},
+{"AreaID":130423, "name":"临漳县", "CityID":130400, "AreaSort":130400},
+{"AreaID":140109, "name":"万柏林区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140181, "name":"古交市", "CityID":140100, "AreaSort":140100},
+{"AreaID":140110, "name":"晋源区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140108, "name":"尖草坪区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140121, "name":"清徐县", "CityID":140100, "AreaSort":140100},
+{"AreaID":140122, "name":"阳曲县", "CityID":140100, "AreaSort":140100},
+{"AreaID":140105, "name":"小店区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140123, "name":"娄烦县", "CityID":140100, "AreaSort":140100},
+{"AreaID":140107, "name":"杏花岭区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140106, "name":"迎泽区", "CityID":140100, "AreaSort":140100},
+{"AreaID":140521, "name":"沁水县", "CityID":140500, "AreaSort":140500},
+{"AreaID":140502, "name":"城区", "CityID":140500, "AreaSort":140500},
+{"AreaID":140581, "name":"高平市", "CityID":140500, "AreaSort":140500},
+{"AreaID":140525, "name":"泽州县", "CityID":140500, "AreaSort":140500},
+{"AreaID":140524, "name":"陵川县", "CityID":140500, "AreaSort":140500},
+{"AreaID":140522, "name":"阳城县", "CityID":140500, "AreaSort":140500},
+{"AreaID":140881, "name":"永济市", "CityID":140800, "AreaSort":140800},
+{"AreaID":140882, "name":"河津市", "CityID":140800, "AreaSort":140800},
+{"AreaID":140829, "name":"平陆县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140828, "name":"夏县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140827, "name":"垣曲县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140830, "name":"芮城县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140821, "name":"临猗县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140822, "name":"万荣县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140802, "name":"盐湖区", "CityID":140800, "AreaSort":140800},
+{"AreaID":140825, "name":"新绛县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140826, "name":"绛县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140823, "name":"闻喜县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140824, "name":"稷山县", "CityID":140800, "AreaSort":140800},
+{"AreaID":140311, "name":"郊区", "CityID":140300, "AreaSort":140300},
+{"AreaID":140321, "name":"平定县", "CityID":140300, "AreaSort":140300},
+{"AreaID":140322, "name":"盂县", "CityID":140300, "AreaSort":140300},
+{"AreaID":140303, "name":"矿区", "CityID":140300, "AreaSort":140300},
+{"AreaID":140302, "name":"城区", "CityID":140300, "AreaSort":140300},
+{"AreaID":140902, "name":"忻府区", "CityID":140900, "AreaSort":140900},
+{"AreaID":140924, "name":"繁峙县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140925, "name":"宁武县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140930, "name":"河曲县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140922, "name":"五台县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140931, "name":"保德县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140932, "name":"偏关县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140923, "name":"代县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140921, "name":"定襄县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140929, "name":"岢岚县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140928, "name":"五寨县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140927, "name":"神池县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140926, "name":"静乐县", "CityID":140900, "AreaSort":140900},
+{"AreaID":140981, "name":"原平市", "CityID":140900, "AreaSort":140900},
+{"AreaID":140725, "name":"寿阳县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140724, "name":"昔阳县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140727, "name":"祁县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140781, "name":"介休市", "CityID":140700, "AreaSort":140700},
+{"AreaID":140726, "name":"太谷县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140721, "name":"榆社县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140723, "name":"和顺县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140722, "name":"左权县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140728, "name":"平遥县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140729, "name":"灵石县", "CityID":140700, "AreaSort":140700},
+{"AreaID":140702, "name":"榆次区", "CityID":140700, "AreaSort":140700},
+{"AreaID":140426, "name":"黎城县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140481, "name":"潞城市", "CityID":140400, "AreaSort":140400},
+{"AreaID":140425, "name":"平顺县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140424, "name":"屯留县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140423, "name":"襄垣县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140429, "name":"武乡县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140402, "name":"城区", "CityID":140400, "AreaSort":140400},
+{"AreaID":140428, "name":"长子县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140427, "name":"壶关县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140421, "name":"长治县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140411, "name":"郊区", "CityID":140400, "AreaSort":140400},
+{"AreaID":140430, "name":"沁县", "CityID":140400, "AreaSort":140400},
+{"AreaID":140431, "name":"沁源县", "CityID":140400, "AreaSort":140400},
+{"AreaID":141181, "name":"孝义市", "CityID":141100, "AreaSort":141100},
+{"AreaID":141182, "name":"汾阳市", "CityID":141100, "AreaSort":141100},
+{"AreaID":141102, "name":"离石区", "CityID":141100, "AreaSort":141100},
+{"AreaID":141121, "name":"文水县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141130, "name":"交口县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141122, "name":"交城县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141123, "name":"兴县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141124, "name":"临县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141125, "name":"柳林县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141126, "name":"石楼县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141127, "name":"岚县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141128, "name":"方山县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141129, "name":"中阳县", "CityID":141100, "AreaSort":141100},
+{"AreaID":141029, "name":"乡宁县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141028, "name":"吉县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141032, "name":"永和县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141023, "name":"襄汾县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141022, "name":"翼城县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141031, "name":"隰县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141034, "name":"汾西县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141021, "name":"曲沃县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141033, "name":"蒲县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141002, "name":"尧都区", "CityID":141000, "AreaSort":141000},
+{"AreaID":141027, "name":"浮山县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141026, "name":"安泽县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141025, "name":"古县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141024, "name":"洪洞县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141030, "name":"大宁县", "CityID":141000, "AreaSort":141000},
+{"AreaID":141081, "name":"侯马市", "CityID":141000, "AreaSort":141000},
+{"AreaID":141082, "name":"霍州市", "CityID":141000, "AreaSort":141000},
+{"AreaID":140203, "name":"矿区", "CityID":140200, "AreaSort":140200},
+{"AreaID":140225, "name":"浑源县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140226, "name":"左云县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140227, "name":"大同县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140221, "name":"阳高县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140212, "name":"新荣区", "CityID":140200, "AreaSort":140200},
+{"AreaID":140222, "name":"天镇县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140223, "name":"广灵县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140224, "name":"灵丘县", "CityID":140200, "AreaSort":140200},
+{"AreaID":140211, "name":"南郊区", "CityID":140200, "AreaSort":140200},
+{"AreaID":140202, "name":"城区", "CityID":140200, "AreaSort":140200},
+{"AreaID":140623, "name":"右玉县", "CityID":140600, "AreaSort":140600},
+{"AreaID":140624, "name":"怀仁县", "CityID":140600, "AreaSort":140600},
+{"AreaID":140621, "name":"山阴县", "CityID":140600, "AreaSort":140600},
+{"AreaID":140603, "name":"平鲁区", "CityID":140600, "AreaSort":140600},
+{"AreaID":140622, "name":"应县", "CityID":140600, "AreaSort":140600},
+{"AreaID":140602, "name":"朔城区", "CityID":140600, "AreaSort":140600},
+{"AreaID":150303, "name":"海南区", "CityID":150300, "AreaSort":150300},
+{"AreaID":150304, "name":"乌达区", "CityID":150300, "AreaSort":150300},
+{"AreaID":150302, "name":"海勃湾区", "CityID":150300, "AreaSort":150300},
+{"AreaID":150428, "name":"喀喇沁旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150402, "name":"红山区", "CityID":150400, "AreaSort":150400},
+{"AreaID":150429, "name":"宁城县", "CityID":150400, "AreaSort":150400},
+{"AreaID":150403, "name":"元宝山区", "CityID":150400, "AreaSort":150400},
+{"AreaID":150426, "name":"翁牛特旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150430, "name":"敖汉旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150424, "name":"林西县", "CityID":150400, "AreaSort":150400},
+{"AreaID":150425, "name":"克什克腾旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150422, "name":"巴林左旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150404, "name":"松山区", "CityID":150400, "AreaSort":150400},
+{"AreaID":150423, "name":"巴林右旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":150421, "name":"阿鲁科尔沁旗", "CityID":150400, "AreaSort":150400},
+{"AreaID":152923, "name":"额济纳旗", "CityID":152900, "AreaSort":152900},
+{"AreaID":152921, "name":"阿拉善左旗", "CityID":152900, "AreaSort":152900},
+{"AreaID":152922, "name":"阿拉善右旗", "CityID":152900, "AreaSort":152900},
+{"AreaID":150823, "name":"乌拉特前旗", "CityID":150800, "AreaSort":150800},
+{"AreaID":150822, "name":"磴口县", "CityID":150800, "AreaSort":150800},
+{"AreaID":150825, "name":"乌拉特后旗", "CityID":150800, "AreaSort":150800},
+{"AreaID":150824, "name":"乌拉特中旗", "CityID":150800, "AreaSort":150800},
+{"AreaID":150821, "name":"五原县", "CityID":150800, "AreaSort":150800},
+{"AreaID":150802, "name":"临河区", "CityID":150800, "AreaSort":150800},
+{"AreaID":150826, "name":"杭锦后旗", "CityID":150800, "AreaSort":150800},
+{"AreaID":150502, "name":"科尔沁区", "CityID":150500, "AreaSort":150500},
+{"AreaID":150524, "name":"库伦旗", "CityID":150500, "AreaSort":150500},
+{"AreaID":150523, "name":"开鲁县", "CityID":150500, "AreaSort":150500},
+{"AreaID":150522, "name":"科尔沁左翼后旗", "CityID":150500, "AreaSort":150500},
+{"AreaID":150521, "name":"科尔沁左翼中旗", "CityID":150500, "AreaSort":150500},
+{"AreaID":150581, "name":"霍林郭勒市", "CityID":150500, "AreaSort":150500},
+{"AreaID":150526, "name":"扎鲁特旗", "CityID":150500, "AreaSort":150500},
+{"AreaID":150525, "name":"奈曼旗", "CityID":150500, "AreaSort":150500},
+{"AreaID":150223, "name":"达尔罕茂明安联合旗", "CityID":150200, "AreaSort":150200},
+{"AreaID":150222, "name":"固阳县", "CityID":150200, "AreaSort":150200},
+{"AreaID":150221, "name":"土默特右旗", "CityID":150200, "AreaSort":150200},
+{"AreaID":150205, "name":"石拐区", "CityID":150200, "AreaSort":150200},
+{"AreaID":150204, "name":"青山区", "CityID":150200, "AreaSort":150200},
+{"AreaID":150203, "name":"昆都仑区", "CityID":150200, "AreaSort":150200},
+{"AreaID":150202, "name":"东河区", "CityID":150200, "AreaSort":150200},
+{"AreaID":150207, "name":"九原区", "CityID":150200, "AreaSort":150200},
+{"AreaID":150206, "name":"白云鄂博矿区", "CityID":150200, "AreaSort":150200},
+{"AreaID":152202, "name":"阿尔山市", "CityID":152200, "AreaSort":152200},
+{"AreaID":152201, "name":"乌兰浩特市", "CityID":152200, "AreaSort":152200},
+{"AreaID":152224, "name":"突泉县", "CityID":152200, "AreaSort":152200},
+{"AreaID":152223, "name":"扎赉特旗", "CityID":152200, "AreaSort":152200},
+{"AreaID":152222, "name":"科尔沁右翼中旗", "CityID":152200, "AreaSort":152200},
+{"AreaID":152221, "name":"科尔沁右翼前旗", "CityID":152200, "AreaSort":152200},
+{"AreaID":150924, "name":"兴和县", "CityID":150900, "AreaSort":150900},
+{"AreaID":150923, "name":"商都县", "CityID":150900, "AreaSort":150900},
+{"AreaID":150922, "name":"化德县", "CityID":150900, "AreaSort":150900},
+{"AreaID":150921, "name":"卓资县", "CityID":150900, "AreaSort":150900},
+{"AreaID":150981, "name":"丰镇市", "CityID":150900, "AreaSort":150900},
+{"AreaID":150929, "name":"四子王旗", "CityID":150900, "AreaSort":150900},
+{"AreaID":150902, "name":"集宁区", "CityID":150900, "AreaSort":150900},
+{"AreaID":150927, "name":"察哈尔右翼中旗", "CityID":150900, "AreaSort":150900},
+{"AreaID":150928, "name":"察哈尔右翼后旗", "CityID":150900, "AreaSort":150900},
+{"AreaID":150925, "name":"凉城县", "CityID":150900, "AreaSort":150900},
+{"AreaID":150926, "name":"察哈尔右翼前旗", "CityID":150900, "AreaSort":150900},
+{"AreaID":150624, "name":"鄂托克旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150625, "name":"杭锦旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150626, "name":"乌审旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150627, "name":"伊金霍洛旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150602, "name":"东胜区", "CityID":150600, "AreaSort":150600},
+{"AreaID":150621, "name":"达拉特旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150622, "name":"准格尔旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150623, "name":"鄂托克前旗", "CityID":150600, "AreaSort":150600},
+{"AreaID":150125, "name":"武川县", "CityID":150100, "AreaSort":150100},
+{"AreaID":150105, "name":"赛罕区", "CityID":150100, "AreaSort":150100},
+{"AreaID":150104, "name":"玉泉区", "CityID":150100, "AreaSort":150100},
+{"AreaID":150103, "name":"回民区", "CityID":150100, "AreaSort":150100},
+{"AreaID":150121, "name":"土默特左旗", "CityID":150100, "AreaSort":150100},
+{"AreaID":150102, "name":"新城区", "CityID":150100, "AreaSort":150100},
+{"AreaID":150122, "name":"托克托县", "CityID":150100, "AreaSort":150100},
+{"AreaID":150123, "name":"和林格尔县", "CityID":150100, "AreaSort":150100},
+{"AreaID":150124, "name":"清水河县", "CityID":150100, "AreaSort":150100},
+{"AreaID":152528, "name":"镶黄旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152502, "name":"锡林浩特市", "CityID":152500, "AreaSort":152500},
+{"AreaID":152527, "name":"太仆寺旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152501, "name":"二连浩特市", "CityID":152500, "AreaSort":152500},
+{"AreaID":152529, "name":"正镶白旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152524, "name":"苏尼特右旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152523, "name":"苏尼特左旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152526, "name":"西乌珠穆沁旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152525, "name":"东乌珠穆沁旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152530, "name":"正蓝旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":152531, "name":"多伦县", "CityID":152500, "AreaSort":152500},
+{"AreaID":152522, "name":"阿巴嘎旗", "CityID":152500, "AreaSort":152500},
+{"AreaID":150784, "name":"额尔古纳市", "CityID":150700, "AreaSort":150700},
+{"AreaID":150783, "name":"扎兰屯市", "CityID":150700, "AreaSort":150700},
+{"AreaID":150782, "name":"牙克石市", "CityID":150700, "AreaSort":150700},
+{"AreaID":150721, "name":"阿荣旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150781, "name":"满洲里市", "CityID":150700, "AreaSort":150700},
+{"AreaID":150722, "name":"莫力达瓦达斡尔族自治旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150723, "name":"鄂伦春自治旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150724, "name":"鄂温克族自治旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150725, "name":"陈巴尔虎旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150726, "name":"新巴尔虎左旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150702, "name":"海拉尔区", "CityID":150700, "AreaSort":150700},
+{"AreaID":150727, "name":"新巴尔虎右旗", "CityID":150700, "AreaSort":150700},
+{"AreaID":150703, "name":"扎赉诺尔区", "CityID":150700, "AreaSort":150700},
+{"AreaID":150785, "name":"根河市", "CityID":150700, "AreaSort":150700},
+{"AreaID":211102, "name":"双台子区", "CityID":211100, "AreaSort":211100},
+{"AreaID":211121, "name":"大洼县", "CityID":211100, "AreaSort":211100},
+{"AreaID":211103, "name":"兴隆台区", "CityID":211100, "AreaSort":211100},
+{"AreaID":211122, "name":"盘山县", "CityID":211100, "AreaSort":211100},
+{"AreaID":210782, "name":"北镇市", "CityID":210700, "AreaSort":210700},
+{"AreaID":210711, "name":"太和区", "CityID":210700, "AreaSort":210700},
+{"AreaID":210781, "name":"凌海市", "CityID":210700, "AreaSort":210700},
+{"AreaID":210727, "name":"义县", "CityID":210700, "AreaSort":210700},
+{"AreaID":210726, "name":"黑山县", "CityID":210700, "AreaSort":210700},
+{"AreaID":210703, "name":"凌河区", "CityID":210700, "AreaSort":210700},
+{"AreaID":210702, "name":"古塔区", "CityID":210700, "AreaSort":210700},
+{"AreaID":211303, "name":"龙城区", "CityID":211300, "AreaSort":211300},
+{"AreaID":211302, "name":"双塔区", "CityID":211300, "AreaSort":211300},
+{"AreaID":211321, "name":"朝阳县", "CityID":211300, "AreaSort":211300},
+{"AreaID":211322, "name":"建平县", "CityID":211300, "AreaSort":211300},
+{"AreaID":211324, "name":"喀喇沁左翼蒙古族自治县", "CityID":211300, "AreaSort":211300},
+{"AreaID":211381, "name":"北票市", "CityID":211300, "AreaSort":211300},
+{"AreaID":211382, "name":"凌源市", "CityID":211300, "AreaSort":211300},
+{"AreaID":210922, "name":"彰武县", "CityID":210900, "AreaSort":210900},
+{"AreaID":210904, "name":"太平区", "CityID":210900, "AreaSort":210900},
+{"AreaID":210905, "name":"清河门区", "CityID":210900, "AreaSort":210900},
+{"AreaID":210911, "name":"细河区", "CityID":210900, "AreaSort":210900},
+{"AreaID":210902, "name":"海州区", "CityID":210900, "AreaSort":210900},
+{"AreaID":210903, "name":"新邱区", "CityID":210900, "AreaSort":210900},
+{"AreaID":210921, "name":"阜新蒙古族自治县", "CityID":210900, "AreaSort":210900},
+{"AreaID":210881, "name":"盖州市", "CityID":210800, "AreaSort":210800},
+{"AreaID":210882, "name":"大石桥市", "CityID":210800, "AreaSort":210800},
+{"AreaID":210811, "name":"老边区", "CityID":210800, "AreaSort":210800},
+{"AreaID":210802, "name":"站前区", "CityID":210800, "AreaSort":210800},
+{"AreaID":210803, "name":"西市区", "CityID":210800, "AreaSort":210800},
+{"AreaID":210804, "name":"鲅鱼圈区", "CityID":210800, "AreaSort":210800},
+{"AreaID":211021, "name":"辽阳县", "CityID":211000, "AreaSort":211000},
+{"AreaID":211081, "name":"灯塔市", "CityID":211000, "AreaSort":211000},
+{"AreaID":211011, "name":"太子河区", "CityID":211000, "AreaSort":211000},
+{"AreaID":211004, "name":"宏伟区", "CityID":211000, "AreaSort":211000},
+{"AreaID":211005, "name":"弓长岭区", "CityID":211000, "AreaSort":211000},
+{"AreaID":211002, "name":"白塔区", "CityID":211000, "AreaSort":211000},
+{"AreaID":211003, "name":"文圣区", "CityID":211000, "AreaSort":211000},
+{"AreaID":210102, "name":"和平区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210111, "name":"苏家屯区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210103, "name":"沈河区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210112, "name":"浑南区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210113, "name":"沈北新区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210114, "name":"于洪区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210106, "name":"铁西区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210124, "name":"法库县", "CityID":210100, "AreaSort":210100},
+{"AreaID":210104, "name":"大东区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210122, "name":"辽中县", "CityID":210100, "AreaSort":210100},
+{"AreaID":210181, "name":"新民市", "CityID":210100, "AreaSort":210100},
+{"AreaID":210105, "name":"皇姑区", "CityID":210100, "AreaSort":210100},
+{"AreaID":210123, "name":"康平县", "CityID":210100, "AreaSort":210100},
+{"AreaID":211481, "name":"兴城市", "CityID":211400, "AreaSort":211400},
+{"AreaID":211421, "name":"绥中县", "CityID":211400, "AreaSort":211400},
+{"AreaID":211403, "name":"龙港区", "CityID":211400, "AreaSort":211400},
+{"AreaID":211402, "name":"连山区", "CityID":211400, "AreaSort":211400},
+{"AreaID":211422, "name":"建昌县", "CityID":211400, "AreaSort":211400},
+{"AreaID":211404, "name":"南票区", "CityID":211400, "AreaSort":211400},
+{"AreaID":210624, "name":"宽甸满族自治县", "CityID":210600, "AreaSort":210600},
+{"AreaID":210604, "name":"振安区", "CityID":210600, "AreaSort":210600},
+{"AreaID":210603, "name":"振兴区", "CityID":210600, "AreaSort":210600},
+{"AreaID":210681, "name":"东港市", "CityID":210600, "AreaSort":210600},
+{"AreaID":210682, "name":"凤城市", "CityID":210600, "AreaSort":210600},
+{"AreaID":210602, "name":"元宝区", "CityID":210600, "AreaSort":210600},
+{"AreaID":210411, "name":"顺城区", "CityID":210400, "AreaSort":210400},
+{"AreaID":210404, "name":"望花区", "CityID":210400, "AreaSort":210400},
+{"AreaID":210403, "name":"东洲区", "CityID":210400, "AreaSort":210400},
+{"AreaID":210402, "name":"新抚区", "CityID":210400, "AreaSort":210400},
+{"AreaID":210421, "name":"抚顺县", "CityID":210400, "AreaSort":210400},
+{"AreaID":210422, "name":"新宾满族自治县", "CityID":210400, "AreaSort":210400},
+{"AreaID":210423, "name":"清原满族自治县", "CityID":210400, "AreaSort":210400},
+{"AreaID":211202, "name":"银州区", "CityID":211200, "AreaSort":211200},
+{"AreaID":211204, "name":"清河区", "CityID":211200, "AreaSort":211200},
+{"AreaID":211223, "name":"西丰县", "CityID":211200, "AreaSort":211200},
+{"AreaID":211224, "name":"昌图县", "CityID":211200, "AreaSort":211200},
+{"AreaID":211281, "name":"调兵山市", "CityID":211200, "AreaSort":211200},
+{"AreaID":211221, "name":"铁岭县", "CityID":211200, "AreaSort":211200},
+{"AreaID":211282, "name":"开原市", "CityID":211200, "AreaSort":211200},
+{"AreaID":210311, "name":"千山区", "CityID":210300, "AreaSort":210300},
+{"AreaID":210302, "name":"铁东区", "CityID":210300, "AreaSort":210300},
+{"AreaID":210381, "name":"海城市", "CityID":210300, "AreaSort":210300},
+{"AreaID":210321, "name":"台安县", "CityID":210300, "AreaSort":210300},
+{"AreaID":210303, "name":"铁西区", "CityID":210300, "AreaSort":210300},
+{"AreaID":210304, "name":"立山区", "CityID":210300, "AreaSort":210300},
+{"AreaID":210323, "name":"岫岩满族自治县", "CityID":210300, "AreaSort":210300},
+{"AreaID":210505, "name":"南芬区", "CityID":210500, "AreaSort":210500},
+{"AreaID":210504, "name":"明山区", "CityID":210500, "AreaSort":210500},
+{"AreaID":210521, "name":"本溪满族自治县", "CityID":210500, "AreaSort":210500},
+{"AreaID":210503, "name":"溪湖区", "CityID":210500, "AreaSort":210500},
+{"AreaID":210502, "name":"平山区", "CityID":210500, "AreaSort":210500},
+{"AreaID":210522, "name":"桓仁满族自治县", "CityID":210500, "AreaSort":210500},
+{"AreaID":210224, "name":"长海县", "CityID":210200, "AreaSort":210200},
+{"AreaID":210281, "name":"瓦房店市", "CityID":210200, "AreaSort":210200},
+{"AreaID":210283, "name":"庄河市", "CityID":210200, "AreaSort":210200},
+{"AreaID":210203, "name":"西岗区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210204, "name":"沙河口区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210214, "name":"普兰店区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210212, "name":"旅顺口区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210213, "name":"金州区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210211, "name":"甘井子区", "CityID":210200, "AreaSort":210200},
+{"AreaID":210202, "name":"中山区", "CityID":210200, "AreaSort":210200},
+{"AreaID":220781, "name":"扶余市", "CityID":220700, "AreaSort":220700},
+{"AreaID":220721, "name":"前郭尔罗斯蒙古族自治县", "CityID":220700, "AreaSort":220700},
+{"AreaID":220722, "name":"长岭县", "CityID":220700, "AreaSort":220700},
+{"AreaID":220723, "name":"乾安县", "CityID":220700, "AreaSort":220700},
+{"AreaID":220702, "name":"宁江区", "CityID":220700, "AreaSort":220700},
+{"AreaID":220403, "name":"西安区", "CityID":220400, "AreaSort":220400},
+{"AreaID":220402, "name":"龙山区", "CityID":220400, "AreaSort":220400},
+{"AreaID":220422, "name":"东辽县", "CityID":220400, "AreaSort":220400},
+{"AreaID":220421, "name":"东丰县", "CityID":220400, "AreaSort":220400},
+{"AreaID":220203, "name":"龙潭区", "CityID":220200, "AreaSort":220200},
+{"AreaID":220202, "name":"昌邑区", "CityID":220200, "AreaSort":220200},
+{"AreaID":220204, "name":"船营区", "CityID":220200, "AreaSort":220200},
+{"AreaID":220211, "name":"丰满区", "CityID":220200, "AreaSort":220200},
+{"AreaID":220282, "name":"桦甸市", "CityID":220200, "AreaSort":220200},
+{"AreaID":220283, "name":"舒兰市", "CityID":220200, "AreaSort":220200},
+{"AreaID":220284, "name":"磐石市", "CityID":220200, "AreaSort":220200},
+{"AreaID":220281, "name":"蛟河市", "CityID":220200, "AreaSort":220200},
+{"AreaID":220221, "name":"永吉县", "CityID":220200, "AreaSort":220200},
+{"AreaID":220105, "name":"二道区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220106, "name":"绿园区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220103, "name":"宽城区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220182, "name":"榆树市", "CityID":220100, "AreaSort":220100},
+{"AreaID":220122, "name":"农安县", "CityID":220100, "AreaSort":220100},
+{"AreaID":220104, "name":"朝阳区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220183, "name":"德惠市", "CityID":220100, "AreaSort":220100},
+{"AreaID":220102, "name":"南关区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220112, "name":"双阳区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220113, "name":"九台区", "CityID":220100, "AreaSort":220100},
+{"AreaID":220882, "name":"大安市", "CityID":220800, "AreaSort":220800},
+{"AreaID":220881, "name":"洮南市", "CityID":220800, "AreaSort":220800},
+{"AreaID":220822, "name":"通榆县", "CityID":220800, "AreaSort":220800},
+{"AreaID":220821, "name":"镇赉县", "CityID":220800, "AreaSort":220800},
+{"AreaID":220802, "name":"洮北区", "CityID":220800, "AreaSort":220800},
+{"AreaID":220503, "name":"二道江区", "CityID":220500, "AreaSort":220500},
+{"AreaID":220502, "name":"东昌区", "CityID":220500, "AreaSort":220500},
+{"AreaID":220524, "name":"柳河县", "CityID":220500, "AreaSort":220500},
+{"AreaID":220523, "name":"辉南县", "CityID":220500, "AreaSort":220500},
+{"AreaID":220582, "name":"集安市", "CityID":220500, "AreaSort":220500},
+{"AreaID":220581, "name":"梅河口市", "CityID":220500, "AreaSort":220500},
+{"AreaID":220521, "name":"通化县", "CityID":220500, "AreaSort":220500},
+{"AreaID":220323, "name":"伊通满族自治县", "CityID":220300, "AreaSort":220300},
+{"AreaID":220382, "name":"双辽市", "CityID":220300, "AreaSort":220300},
+{"AreaID":220302, "name":"铁西区", "CityID":220300, "AreaSort":220300},
+{"AreaID":220381, "name":"公主岭市", "CityID":220300, "AreaSort":220300},
+{"AreaID":220322, "name":"梨树县", "CityID":220300, "AreaSort":220300},
+{"AreaID":220303, "name":"铁东区", "CityID":220300, "AreaSort":220300},
+{"AreaID":222406, "name":"和龙市", "CityID":222400, "AreaSort":222400},
+{"AreaID":222402, "name":"图们市", "CityID":222400, "AreaSort":222400},
+{"AreaID":222403, "name":"敦化市", "CityID":222400, "AreaSort":222400},
+{"AreaID":222404, "name":"珲春市", "CityID":222400, "AreaSort":222400},
+{"AreaID":222405, "name":"龙井市", "CityID":222400, "AreaSort":222400},
+{"AreaID":222424, "name":"汪清县", "CityID":222400, "AreaSort":222400},
+{"AreaID":222426, "name":"安图县", "CityID":222400, "AreaSort":222400},
+{"AreaID":222401, "name":"延吉市", "CityID":222400, "AreaSort":222400},
+{"AreaID":220623, "name":"长白朝鲜族自治县", "CityID":220600, "AreaSort":220600},
+{"AreaID":220602, "name":"浑江区", "CityID":220600, "AreaSort":220600},
+{"AreaID":220622, "name":"靖宇县", "CityID":220600, "AreaSort":220600},
+{"AreaID":220681, "name":"临江市", "CityID":220600, "AreaSort":220600},
+{"AreaID":220621, "name":"抚松县", "CityID":220600, "AreaSort":220600},
+{"AreaID":220605, "name":"江源区", "CityID":220600, "AreaSort":220600},
+{"AreaID":231002, "name":"东安区", "CityID":231000, "AreaSort":231000},
+{"AreaID":231003, "name":"阳明区", "CityID":231000, "AreaSort":231000},
+{"AreaID":231004, "name":"爱民区", "CityID":231000, "AreaSort":231000},
+{"AreaID":231005, "name":"西安区", "CityID":231000, "AreaSort":231000},
+{"AreaID":231025, "name":"林口县", "CityID":231000, "AreaSort":231000},
+{"AreaID":231081, "name":"绥芬河市", "CityID":231000, "AreaSort":231000},
+{"AreaID":231083, "name":"海林市", "CityID":231000, "AreaSort":231000},
+{"AreaID":231085, "name":"穆棱市", "CityID":231000, "AreaSort":231000},
+{"AreaID":231084, "name":"宁安市", "CityID":231000, "AreaSort":231000},
+{"AreaID":231086, "name":"东宁市", "CityID":231000, "AreaSort":231000},
+{"AreaID":230402, "name":"向阳区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230407, "name":"兴山区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230404, "name":"南山区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230403, "name":"工农区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230421, "name":"萝北县", "CityID":230400, "AreaSort":230400},
+{"AreaID":230406, "name":"东山区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230422, "name":"绥滨县", "CityID":230400, "AreaSort":230400},
+{"AreaID":230405, "name":"兴安区", "CityID":230400, "AreaSort":230400},
+{"AreaID":230833, "name":"抚远市", "CityID":230800, "AreaSort":230800},
+{"AreaID":230822, "name":"桦南县", "CityID":230800, "AreaSort":230800},
+{"AreaID":230811, "name":"郊区", "CityID":230800, "AreaSort":230800},
+{"AreaID":230881, "name":"同江市", "CityID":230800, "AreaSort":230800},
+{"AreaID":230828, "name":"汤原县", "CityID":230800, "AreaSort":230800},
+{"AreaID":230803, "name":"向阳区", "CityID":230800, "AreaSort":230800},
+{"AreaID":230882, "name":"富锦市", "CityID":230800, "AreaSort":230800},
+{"AreaID":230804, "name":"前进区", "CityID":230800, "AreaSort":230800},
+{"AreaID":230826, "name":"桦川县", "CityID":230800, "AreaSort":230800},
+{"AreaID":230805, "name":"东风区", "CityID":230800, "AreaSort":230800},
+{"AreaID":231102, "name":"爱辉区", "CityID":231100, "AreaSort":231100},
+{"AreaID":231121, "name":"嫩江县", "CityID":231100, "AreaSort":231100},
+{"AreaID":231124, "name":"孙吴县", "CityID":231100, "AreaSort":231100},
+{"AreaID":231123, "name":"逊克县", "CityID":231100, "AreaSort":231100},
+{"AreaID":231182, "name":"五大连池市", "CityID":231100, "AreaSort":231100},
+{"AreaID":231181, "name":"北安市", "CityID":231100, "AreaSort":231100},
+{"AreaID":232701, "name":"加格达奇区", "CityID":232700, "AreaSort":232700},
+{"AreaID":232721, "name":"呼玛县", "CityID":232700, "AreaSort":232700},
+{"AreaID":232723, "name":"漠河县", "CityID":232700, "AreaSort":232700},
+{"AreaID":232722, "name":"塔河县", "CityID":232700, "AreaSort":232700},
+{"AreaID":230381, "name":"虎林市", "CityID":230300, "AreaSort":230300},
+{"AreaID":230382, "name":"密山市", "CityID":230300, "AreaSort":230300},
+{"AreaID":230302, "name":"鸡冠区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230321, "name":"鸡东县", "CityID":230300, "AreaSort":230300},
+{"AreaID":230303, "name":"恒山区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230306, "name":"城子河区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230307, "name":"麻山区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230304, "name":"滴道区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230305, "name":"梨树区", "CityID":230300, "AreaSort":230300},
+{"AreaID":230606, "name":"大同区", "CityID":230600, "AreaSort":230600},
+{"AreaID":230605, "name":"红岗区", "CityID":230600, "AreaSort":230600},
+{"AreaID":230621, "name":"肇州县", "CityID":230600, "AreaSort":230600},
+{"AreaID":230604, "name":"让胡路区", "CityID":230600, "AreaSort":230600},
+{"AreaID":230622, "name":"肇源县", "CityID":230600, "AreaSort":230600},
+{"AreaID":230603, "name":"龙凤区", "CityID":230600, "AreaSort":230600},
+{"AreaID":230602, "name":"萨尔图区", "CityID":230600, "AreaSort":230600},
+{"AreaID":230623, "name":"林甸县", "CityID":230600, "AreaSort":230600},
+{"AreaID":230624, "name":"杜尔伯特蒙古族自治县", "CityID":230600, "AreaSort":230600},
+{"AreaID":230108, "name":"平房区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230109, "name":"松北区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230128, "name":"通河县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230129, "name":"延寿县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230126, "name":"巴彦县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230127, "name":"木兰县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230110, "name":"香坊区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230111, "name":"呼兰区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230124, "name":"方正县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230112, "name":"阿城区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230125, "name":"宾县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230184, "name":"五常市", "CityID":230100, "AreaSort":230100},
+{"AreaID":230104, "name":"道外区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230113, "name":"双城区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230123, "name":"依兰县", "CityID":230100, "AreaSort":230100},
+{"AreaID":230102, "name":"道里区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230183, "name":"尚志市", "CityID":230100, "AreaSort":230100},
+{"AreaID":230103, "name":"南岗区", "CityID":230100, "AreaSort":230100},
+{"AreaID":230781, "name":"铁力市", "CityID":230700, "AreaSort":230700},
+{"AreaID":230708, "name":"美溪区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230709, "name":"金山屯区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230710, "name":"五营区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230703, "name":"南岔区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230712, "name":"汤旺河区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230702, "name":"伊春区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230711, "name":"乌马河区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230714, "name":"乌伊岭区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230713, "name":"带岭区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230716, "name":"上甘岭区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230707, "name":"新青区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230715, "name":"红星区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230706, "name":"翠峦区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230705, "name":"西林区", "CityID":230700, "AreaSort":230700},
+{"AreaID":230722, "name":"嘉荫县", "CityID":230700, "AreaSort":230700},
+{"AreaID":230704, "name":"友好区", "CityID":230700, "AreaSort":230700},
+{"AreaID":231281, "name":"安达市", "CityID":231200, "AreaSort":231200},
+{"AreaID":231283, "name":"海伦市", "CityID":231200, "AreaSort":231200},
+{"AreaID":231282, "name":"肇东市", "CityID":231200, "AreaSort":231200},
+{"AreaID":231222, "name":"兰西县", "CityID":231200, "AreaSort":231200},
+{"AreaID":231223, "name":"青冈县", "CityID":231200, "AreaSort":231200},
+{"AreaID":231202, "name":"北林区", "CityID":231200, "AreaSort":231200},
+{"AreaID":231221, "name":"望奎县", "CityID":231200, "AreaSort":231200},
+{"AreaID":231226, "name":"绥棱县", "CityID":231200, "AreaSort":231200},
+{"AreaID":231224, "name":"庆安县", "CityID":231200, "AreaSort":231200},
+{"AreaID":231225, "name":"明水县", "CityID":231200, "AreaSort":231200},
+{"AreaID":230231, "name":"拜泉县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230230, "name":"克东县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230221, "name":"龙江县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230281, "name":"讷河市", "CityID":230200, "AreaSort":230200},
+{"AreaID":230207, "name":"碾子山区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230208, "name":"梅里斯达斡尔族区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230225, "name":"甘南县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230205, "name":"昂昂溪区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230224, "name":"泰来县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230206, "name":"富拉尔基区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230223, "name":"依安县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230203, "name":"建华区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230229, "name":"克山县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230204, "name":"铁锋区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230202, "name":"龙沙区", "CityID":230200, "AreaSort":230200},
+{"AreaID":230227, "name":"富裕县", "CityID":230200, "AreaSort":230200},
+{"AreaID":230902, "name":"新兴区", "CityID":230900, "AreaSort":230900},
+{"AreaID":230921, "name":"勃利县", "CityID":230900, "AreaSort":230900},
+{"AreaID":230903, "name":"桃山区", "CityID":230900, "AreaSort":230900},
+{"AreaID":230904, "name":"茄子河区", "CityID":230900, "AreaSort":230900},
+{"AreaID":230503, "name":"岭东区", "CityID":230500, "AreaSort":230500},
+{"AreaID":230502, "name":"尖山区", "CityID":230500, "AreaSort":230500},
+{"AreaID":230505, "name":"四方台区", "CityID":230500, "AreaSort":230500},
+{"AreaID":230524, "name":"饶河县", "CityID":230500, "AreaSort":230500},
+{"AreaID":230506, "name":"宝山区", "CityID":230500, "AreaSort":230500},
+{"AreaID":230521, "name":"集贤县", "CityID":230500, "AreaSort":230500},
+{"AreaID":230523, "name":"宝清县", "CityID":230500, "AreaSort":230500},
+{"AreaID":230522, "name":"友谊县", "CityID":230500, "AreaSort":230500},
+{"AreaID":310120, "name":"奉贤区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310110, "name":"杨浦区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310109, "name":"虹口区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310116, "name":"金山区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310117, "name":"松江区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310104, "name":"徐汇区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310118, "name":"青浦区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310101, "name":"黄浦区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310107, "name":"普陀区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310112, "name":"闵行区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310113, "name":"宝山区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310230, "name":"崇明县", "CityID":310100, "AreaSort":310000},
+{"AreaID":310105, "name":"长宁区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310114, "name":"嘉定区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310106, "name":"静安区", "CityID":310100, "AreaSort":310000},
+{"AreaID":310115, "name":"浦东新区", "CityID":310100, "AreaSort":310000},
+{"AreaID":320404, "name":"钟楼区", "CityID":320400, "AreaSort":320400},
+{"AreaID":320402, "name":"天宁区", "CityID":320400, "AreaSort":320400},
+{"AreaID":320411, "name":"新北区", "CityID":320400, "AreaSort":320400},
+{"AreaID":320481, "name":"溧阳市", "CityID":320400, "AreaSort":320400},
+{"AreaID":320413, "name":"金坛区", "CityID":320400, "AreaSort":320400},
+{"AreaID":320412, "name":"武进区", "CityID":320400, "AreaSort":320400},
+{"AreaID":320324, "name":"睢宁县", "CityID":320300, "AreaSort":320300},
+{"AreaID":320321, "name":"丰县", "CityID":320300, "AreaSort":320300},
+{"AreaID":320312, "name":"铜山区", "CityID":320300, "AreaSort":320300},
+{"AreaID":320303, "name":"云龙区", "CityID":320300, "AreaSort":320300},
+{"AreaID":320311, "name":"泉山区", "CityID":320300, "AreaSort":320300},
+{"AreaID":320302, "name":"鼓楼区", "CityID":320300, "AreaSort":320300},
+{"AreaID":320305, "name":"贾汪区", "CityID":320300, "AreaSort":320300},
+{"AreaID":320322, "name":"沛县", "CityID":320300, "AreaSort":320300},
+{"AreaID":320381, "name":"新沂市", "CityID":320300, "AreaSort":320300},
+{"AreaID":320382, "name":"邳州市", "CityID":320300, "AreaSort":320300},
+{"AreaID":321204, "name":"姜堰区", "CityID":321200, "AreaSort":321200},
+{"AreaID":321203, "name":"高港区", "CityID":321200, "AreaSort":321200},
+{"AreaID":321202, "name":"海陵区", "CityID":321200, "AreaSort":321200},
+{"AreaID":321282, "name":"靖江市", "CityID":321200, "AreaSort":321200},
+{"AreaID":321283, "name":"泰兴市", "CityID":321200, "AreaSort":321200},
+{"AreaID":321281, "name":"兴化市", "CityID":321200, "AreaSort":321200},
+{"AreaID":320508, "name":"姑苏区", "CityID":320500, "AreaSort":320500},
+{"AreaID":320509, "name":"吴江区", "CityID":320500, "AreaSort":320500},
+{"AreaID":320583, "name":"昆山市", "CityID":320500, "AreaSort":320500},
+{"AreaID":320506, "name":"吴中区", "CityID":320500, "AreaSort":320500},
+{"AreaID":320582, "name":"张家港市", "CityID":320500, "AreaSort":320500},
+{"AreaID":320507, "name":"相城区", "CityID":320500, "AreaSort":320500},
+{"AreaID":320581, "name":"常熟市", "CityID":320500, "AreaSort":320500},
+{"AreaID":320505, "name":"虎丘区", "CityID":320500, "AreaSort":320500},
+{"AreaID":320585, "name":"太仓市", "CityID":320500, "AreaSort":320500},
+{"AreaID":320213, "name":"梁溪区", "CityID":320200, "AreaSort":320200},
+{"AreaID":320211, "name":"滨湖区", "CityID":320200, "AreaSort":320200},
+{"AreaID":320281, "name":"江阴市", "CityID":320200, "AreaSort":320200},
+{"AreaID":320214, "name":"新吴区", "CityID":320200, "AreaSort":320200},
+{"AreaID":320282, "name":"宜兴市", "CityID":320200, "AreaSort":320200},
+{"AreaID":320206, "name":"惠山区", "CityID":320200, "AreaSort":320200},
+{"AreaID":320205, "name":"锡山区", "CityID":320200, "AreaSort":320200},
+{"AreaID":320722, "name":"东海县", "CityID":320700, "AreaSort":320700},
+{"AreaID":320723, "name":"灌云县", "CityID":320700, "AreaSort":320700},
+{"AreaID":320724, "name":"灌南县", "CityID":320700, "AreaSort":320700},
+{"AreaID":320706, "name":"海州区", "CityID":320700, "AreaSort":320700},
+{"AreaID":320707, "name":"赣榆区", "CityID":320700, "AreaSort":320700},
+{"AreaID":320703, "name":"连云区", "CityID":320700, "AreaSort":320700},
+{"AreaID":321081, "name":"仪征市", "CityID":321000, "AreaSort":321000},
+{"AreaID":321012, "name":"江都区", "CityID":321000, "AreaSort":321000},
+{"AreaID":321023, "name":"宝应县", "CityID":321000, "AreaSort":321000},
+{"AreaID":321003, "name":"邗江区", "CityID":321000, "AreaSort":321000},
+{"AreaID":321002, "name":"广陵区", "CityID":321000, "AreaSort":321000},
+{"AreaID":321084, "name":"高邮市", "CityID":321000, "AreaSort":321000},
+{"AreaID":321102, "name":"京口区", "CityID":321100, "AreaSort":321100},
+{"AreaID":321112, "name":"丹徒区", "CityID":321100, "AreaSort":321100},
+{"AreaID":321183, "name":"句容市", "CityID":321100, "AreaSort":321100},
+{"AreaID":321181, "name":"丹阳市", "CityID":321100, "AreaSort":321100},
+{"AreaID":321182, "name":"扬中市", "CityID":321100, "AreaSort":321100},
+{"AreaID":321111, "name":"润州区", "CityID":321100, "AreaSort":321100},
+{"AreaID":320829, "name":"洪泽县", "CityID":320800, "AreaSort":320800},
+{"AreaID":320826, "name":"涟水县", "CityID":320800, "AreaSort":320800},
+{"AreaID":320804, "name":"淮阴区", "CityID":320800, "AreaSort":320800},
+{"AreaID":320811, "name":"清浦区", "CityID":320800, "AreaSort":320800},
+{"AreaID":320803, "name":"淮安区", "CityID":320800, "AreaSort":320800},
+{"AreaID":320802, "name":"清河区", "CityID":320800, "AreaSort":320800},
+{"AreaID":320830, "name":"盱眙县", "CityID":320800, "AreaSort":320800},
+{"AreaID":320831, "name":"金湖县", "CityID":320800, "AreaSort":320800},
+{"AreaID":320925, "name":"建湖县", "CityID":320900, "AreaSort":320900},
+{"AreaID":320924, "name":"射阳县", "CityID":320900, "AreaSort":320900},
+{"AreaID":320923, "name":"阜宁县", "CityID":320900, "AreaSort":320900},
+{"AreaID":320922, "name":"滨海县", "CityID":320900, "AreaSort":320900},
+{"AreaID":320904, "name":"大丰区", "CityID":320900, "AreaSort":320900},
+{"AreaID":320903, "name":"盐都区", "CityID":320900, "AreaSort":320900},
+{"AreaID":320902, "name":"亭湖区", "CityID":320900, "AreaSort":320900},
+{"AreaID":320981, "name":"东台市", "CityID":320900, "AreaSort":320900},
+{"AreaID":320921, "name":"响水县", "CityID":320900, "AreaSort":320900},
+{"AreaID":320118, "name":"高淳区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320117, "name":"溧水区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320116, "name":"六合区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320115, "name":"江宁区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320102, "name":"玄武区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320114, "name":"雨花台区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320105, "name":"建邺区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320113, "name":"栖霞区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320104, "name":"秦淮区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320111, "name":"浦口区", "CityID":320100, "AreaSort":320100},
+{"AreaID":320106, "name":"鼓楼区", "CityID":320100, "AreaSort":320100},
+{"AreaID":321311, "name":"宿豫区", "CityID":321300, "AreaSort":321300},
+{"AreaID":321302, "name":"宿城区", "CityID":321300, "AreaSort":321300},
+{"AreaID":321324, "name":"泗洪县", "CityID":321300, "AreaSort":321300},
+{"AreaID":321323, "name":"泗阳县", "CityID":321300, "AreaSort":321300},
+{"AreaID":321322, "name":"沭阳县", "CityID":321300, "AreaSort":321300},
+{"AreaID":320621, "name":"海安县", "CityID":320600, "AreaSort":320600},
+{"AreaID":320612, "name":"通州区", "CityID":320600, "AreaSort":320600},
+{"AreaID":320682, "name":"如皋市", "CityID":320600, "AreaSort":320600},
+{"AreaID":320611, "name":"港闸区", "CityID":320600, "AreaSort":320600},
+{"AreaID":320681, "name":"启东市", "CityID":320600, "AreaSort":320600},
+{"AreaID":320623, "name":"如东县", "CityID":320600, "AreaSort":320600},
+{"AreaID":320684, "name":"海门市", "CityID":320600, "AreaSort":320600},
+{"AreaID":320602, "name":"崇川区", "CityID":320600, "AreaSort":320600},
+{"AreaID":330624, "name":"新昌县", "CityID":330600, "AreaSort":330600},
+{"AreaID":330683, "name":"嵊州市", "CityID":330600, "AreaSort":330600},
+{"AreaID":330681, "name":"诸暨市", "CityID":330600, "AreaSort":330600},
+{"AreaID":330603, "name":"柯桥区", "CityID":330600, "AreaSort":330600},
+{"AreaID":330602, "name":"越城区", "CityID":330600, "AreaSort":330600},
+{"AreaID":330604, "name":"上虞区", "CityID":330600, "AreaSort":330600},
+{"AreaID":330204, "name":"江东区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330205, "name":"江北区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330203, "name":"海曙区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330281, "name":"余姚市", "CityID":330200, "AreaSort":330200},
+{"AreaID":330225, "name":"象山县", "CityID":330200, "AreaSort":330200},
+{"AreaID":330226, "name":"宁海县", "CityID":330200, "AreaSort":330200},
+{"AreaID":330212, "name":"鄞州区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330211, "name":"镇海区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330283, "name":"奉化市", "CityID":330200, "AreaSort":330200},
+{"AreaID":330206, "name":"北仑区", "CityID":330200, "AreaSort":330200},
+{"AreaID":330282, "name":"慈溪市", "CityID":330200, "AreaSort":330200},
+{"AreaID":330122, "name":"桐庐县", "CityID":330100, "AreaSort":330100},
+{"AreaID":330104, "name":"江干区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330103, "name":"下城区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330111, "name":"富阳区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330106, "name":"西湖区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330110, "name":"余杭区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330105, "name":"拱墅区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330102, "name":"上城区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330127, "name":"淳安县", "CityID":330100, "AreaSort":330100},
+{"AreaID":330185, "name":"临安市", "CityID":330100, "AreaSort":330100},
+{"AreaID":330108, "name":"滨江区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330182, "name":"建德市", "CityID":330100, "AreaSort":330100},
+{"AreaID":330109, "name":"萧山区", "CityID":330100, "AreaSort":330100},
+{"AreaID":330922, "name":"嵊泗县", "CityID":330900, "AreaSort":330900},
+{"AreaID":330921, "name":"岱山县", "CityID":330900, "AreaSort":330900},
+{"AreaID":330903, "name":"普陀区", "CityID":330900, "AreaSort":330900},
+{"AreaID":330902, "name":"定海区", "CityID":330900, "AreaSort":330900},
+{"AreaID":330523, "name":"安吉县", "CityID":330500, "AreaSort":330500},
+{"AreaID":330521, "name":"德清县", "CityID":330500, "AreaSort":330500},
+{"AreaID":330522, "name":"长兴县", "CityID":330500, "AreaSort":330500},
+{"AreaID":330502, "name":"吴兴区", "CityID":330500, "AreaSort":330500},
+{"AreaID":330503, "name":"南浔区", "CityID":330500, "AreaSort":330500},
+{"AreaID":331002, "name":"椒江区", "CityID":331000, "AreaSort":331000},
+{"AreaID":331004, "name":"路桥区", "CityID":331000, "AreaSort":331000},
+{"AreaID":331003, "name":"黄岩区", "CityID":331000, "AreaSort":331000},
+{"AreaID":331081, "name":"温岭市", "CityID":331000, "AreaSort":331000},
+{"AreaID":331021, "name":"玉环县", "CityID":331000, "AreaSort":331000},
+{"AreaID":331082, "name":"临海市", "CityID":331000, "AreaSort":331000},
+{"AreaID":331022, "name":"三门县", "CityID":331000, "AreaSort":331000},
+{"AreaID":331023, "name":"天台县", "CityID":331000, "AreaSort":331000},
+{"AreaID":331024, "name":"仙居县", "CityID":331000, "AreaSort":331000},
+{"AreaID":330382, "name":"乐清市", "CityID":330300, "AreaSort":330300},
+{"AreaID":330305, "name":"洞头区", "CityID":330300, "AreaSort":330300},
+{"AreaID":330381, "name":"瑞安市", "CityID":330300, "AreaSort":330300},
+{"AreaID":330329, "name":"泰顺县", "CityID":330300, "AreaSort":330300},
+{"AreaID":330327, "name":"苍南县", "CityID":330300, "AreaSort":330300},
+{"AreaID":330328, "name":"文成县", "CityID":330300, "AreaSort":330300},
+{"AreaID":330326, "name":"平阳县", "CityID":330300, "AreaSort":330300},
+{"AreaID":330324, "name":"永嘉县", "CityID":330300, "AreaSort":330300},
+{"AreaID":330303, "name":"龙湾区", "CityID":330300, "AreaSort":330300},
+{"AreaID":330304, "name":"瓯海区", "CityID":330300, "AreaSort":330300},
+{"AreaID":330302, "name":"鹿城区", "CityID":330300, "AreaSort":330300},
+{"AreaID":330421, "name":"嘉善县", "CityID":330400, "AreaSort":330400},
+{"AreaID":330483, "name":"桐乡市", "CityID":330400, "AreaSort":330400},
+{"AreaID":330482, "name":"平湖市", "CityID":330400, "AreaSort":330400},
+{"AreaID":330424, "name":"海盐县", "CityID":330400, "AreaSort":330400},
+{"AreaID":330411, "name":"秀洲区", "CityID":330400, "AreaSort":330400},
+{"AreaID":330481, "name":"海宁市", "CityID":330400, "AreaSort":330400},
+{"AreaID":330402, "name":"南湖区", "CityID":330400, "AreaSort":330400},
+{"AreaID":330881, "name":"江山市", "CityID":330800, "AreaSort":330800},
+{"AreaID":330824, "name":"开化县", "CityID":330800, "AreaSort":330800},
+{"AreaID":330825, "name":"龙游县", "CityID":330800, "AreaSort":330800},
+{"AreaID":330822, "name":"常山县", "CityID":330800, "AreaSort":330800},
+{"AreaID":330803, "name":"衢江区", "CityID":330800, "AreaSort":330800},
+{"AreaID":330802, "name":"柯城区", "CityID":330800, "AreaSort":330800},
+{"AreaID":331121, "name":"青田县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331181, "name":"龙泉市", "CityID":331100, "AreaSort":331100},
+{"AreaID":331123, "name":"遂昌县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331122, "name":"缙云县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331125, "name":"云和县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331124, "name":"松阳县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331127, "name":"景宁畲族自治县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331126, "name":"庆元县", "CityID":331100, "AreaSort":331100},
+{"AreaID":331102, "name":"莲都区", "CityID":331100, "AreaSort":331100},
+{"AreaID":330702, "name":"婺城区", "CityID":330700, "AreaSort":330700},
+{"AreaID":330727, "name":"磐安县", "CityID":330700, "AreaSort":330700},
+{"AreaID":330703, "name":"金东区", "CityID":330700, "AreaSort":330700},
+{"AreaID":330723, "name":"武义县", "CityID":330700, "AreaSort":330700},
+{"AreaID":330726, "name":"浦江县", "CityID":330700, "AreaSort":330700},
+{"AreaID":330784, "name":"永康市", "CityID":330700, "AreaSort":330700},
+{"AreaID":330783, "name":"东阳市", "CityID":330700, "AreaSort":330700},
+{"AreaID":330782, "name":"义乌市", "CityID":330700, "AreaSort":330700},
+{"AreaID":330781, "name":"兰溪市", "CityID":330700, "AreaSort":330700},
+{"AreaID":340621, "name":"濉溪县", "CityID":340600, "AreaSort":340600},
+{"AreaID":340604, "name":"烈山区", "CityID":340600, "AreaSort":340600},
+{"AreaID":340603, "name":"相山区", "CityID":340600, "AreaSort":340600},
+{"AreaID":340602, "name":"杜集区", "CityID":340600, "AreaSort":340600},
+{"AreaID":341102, "name":"琅琊区", "CityID":341100, "AreaSort":341100},
+{"AreaID":341126, "name":"凤阳县", "CityID":341100, "AreaSort":341100},
+{"AreaID":341125, "name":"定远县", "CityID":341100, "AreaSort":341100},
+{"AreaID":341124, "name":"全椒县", "CityID":341100, "AreaSort":341100},
+{"AreaID":341182, "name":"明光市", "CityID":341100, "AreaSort":341100},
+{"AreaID":341122, "name":"来安县", "CityID":341100, "AreaSort":341100},
+{"AreaID":341181, "name":"天长市", "CityID":341100, "AreaSort":341100},
+{"AreaID":341103, "name":"南谯区", "CityID":341100, "AreaSort":341100},
+{"AreaID":340711, "name":"郊区", "CityID":340700, "AreaSort":340700},
+{"AreaID":340706, "name":"义安区", "CityID":340700, "AreaSort":340700},
+{"AreaID":340705, "name":"铜官区", "CityID":340700, "AreaSort":340700},
+{"AreaID":340722, "name":"枞阳县", "CityID":340700, "AreaSort":340700},
+{"AreaID":341721, "name":"东至县", "CityID":341700, "AreaSort":341700},
+{"AreaID":341722, "name":"石台县", "CityID":341700, "AreaSort":341700},
+{"AreaID":341702, "name":"贵池区", "CityID":341700, "AreaSort":341700},
+{"AreaID":341723, "name":"青阳县", "CityID":341700, "AreaSort":341700},
+{"AreaID":340181, "name":"巢湖市", "CityID":340100, "AreaSort":340100},
+{"AreaID":340122, "name":"肥东县", "CityID":340100, "AreaSort":340100},
+{"AreaID":340104, "name":"蜀山区", "CityID":340100, "AreaSort":340100},
+{"AreaID":340123, "name":"肥西县", "CityID":340100, "AreaSort":340100},
+{"AreaID":340111, "name":"包河区", "CityID":340100, "AreaSort":340100},
+{"AreaID":340102, "name":"瑶海区", "CityID":340100, "AreaSort":340100},
+{"AreaID":340121, "name":"长丰县", "CityID":340100, "AreaSort":340100},
+{"AreaID":340103, "name":"庐阳区", "CityID":340100, "AreaSort":340100},
+{"AreaID":340124, "name":"庐江县", "CityID":340100, "AreaSort":340100},
+{"AreaID":341822, "name":"广德县", "CityID":341800, "AreaSort":341800},
+{"AreaID":341823, "name":"泾县", "CityID":341800, "AreaSort":341800},
+{"AreaID":341824, "name":"绩溪县", "CityID":341800, "AreaSort":341800},
+{"AreaID":341825, "name":"旌德县", "CityID":341800, "AreaSort":341800},
+{"AreaID":341881, "name":"宁国市", "CityID":341800, "AreaSort":341800},
+{"AreaID":341821, "name":"郎溪县", "CityID":341800, "AreaSort":341800},
+{"AreaID":341802, "name":"宣州区", "CityID":341800, "AreaSort":341800},
+{"AreaID":341504, "name":"叶集区", "CityID":341500, "AreaSort":341500},
+{"AreaID":341503, "name":"裕安区", "CityID":341500, "AreaSort":341500},
+{"AreaID":341525, "name":"霍山县", "CityID":341500, "AreaSort":341500},
+{"AreaID":341524, "name":"金寨县", "CityID":341500, "AreaSort":341500},
+{"AreaID":341523, "name":"舒城县", "CityID":341500, "AreaSort":341500},
+{"AreaID":341522, "name":"霍邱县", "CityID":341500, "AreaSort":341500},
+{"AreaID":341502, "name":"金安区", "CityID":341500, "AreaSort":341500},
+{"AreaID":341302, "name":"埇桥区", "CityID":341300, "AreaSort":341300},
+{"AreaID":341321, "name":"砀山县", "CityID":341300, "AreaSort":341300},
+{"AreaID":341322, "name":"萧县", "CityID":341300, "AreaSort":341300},
+{"AreaID":341323, "name":"灵璧县", "CityID":341300, "AreaSort":341300},
+{"AreaID":341324, "name":"泗县", "CityID":341300, "AreaSort":341300},
+{"AreaID":341202, "name":"颍州区", "CityID":341200, "AreaSort":341200},
+{"AreaID":341203, "name":"颍东区", "CityID":341200, "AreaSort":341200},
+{"AreaID":341204, "name":"颍泉区", "CityID":341200, "AreaSort":341200},
+{"AreaID":341222, "name":"太和县", "CityID":341200, "AreaSort":341200},
+{"AreaID":341221, "name":"临泉县", "CityID":341200, "AreaSort":341200},
+{"AreaID":341282, "name":"界首市", "CityID":341200, "AreaSort":341200},
+{"AreaID":341226, "name":"颍上县", "CityID":341200, "AreaSort":341200},
+{"AreaID":341225, "name":"阜南县", "CityID":341200, "AreaSort":341200},
+{"AreaID":340523, "name":"和县", "CityID":340500, "AreaSort":340500},
+{"AreaID":340522, "name":"含山县", "CityID":340500, "AreaSort":340500},
+{"AreaID":340521, "name":"当涂县", "CityID":340500, "AreaSort":340500},
+{"AreaID":340504, "name":"雨山区", "CityID":340500, "AreaSort":340500},
+{"AreaID":340503, "name":"花山区", "CityID":340500, "AreaSort":340500},
+{"AreaID":340506, "name":"博望区", "CityID":340500, "AreaSort":340500},
+{"AreaID":340202, "name":"镜湖区", "CityID":340200, "AreaSort":340200},
+{"AreaID":340203, "name":"弋江区", "CityID":340200, "AreaSort":340200},
+{"AreaID":340222, "name":"繁昌县", "CityID":340200, "AreaSort":340200},
+{"AreaID":340221, "name":"芜湖县", "CityID":340200, "AreaSort":340200},
+{"AreaID":340223, "name":"南陵县", "CityID":340200, "AreaSort":340200},
+{"AreaID":340207, "name":"鸠江区", "CityID":340200, "AreaSort":340200},
+{"AreaID":340225, "name":"无为县", "CityID":340200, "AreaSort":340200},
+{"AreaID":340208, "name":"三山区", "CityID":340200, "AreaSort":340200},
+{"AreaID":340824, "name":"潜山县", "CityID":340800, "AreaSort":340800},
+{"AreaID":340811, "name":"宜秀区", "CityID":340800, "AreaSort":340800},
+{"AreaID":340822, "name":"怀宁县", "CityID":340800, "AreaSort":340800},
+{"AreaID":340802, "name":"迎江区", "CityID":340800, "AreaSort":340800},
+{"AreaID":340881, "name":"桐城市", "CityID":340800, "AreaSort":340800},
+{"AreaID":340828, "name":"岳西县", "CityID":340800, "AreaSort":340800},
+{"AreaID":340803, "name":"大观区", "CityID":340800, "AreaSort":340800},
+{"AreaID":340827, "name":"望江县", "CityID":340800, "AreaSort":340800},
+{"AreaID":340826, "name":"宿松县", "CityID":340800, "AreaSort":340800},
+{"AreaID":340825, "name":"太湖县", "CityID":340800, "AreaSort":340800},
+{"AreaID":341623, "name":"利辛县", "CityID":341600, "AreaSort":341600},
+{"AreaID":341602, "name":"谯城区", "CityID":341600, "AreaSort":341600},
+{"AreaID":341622, "name":"蒙城县", "CityID":341600, "AreaSort":341600},
+{"AreaID":341621, "name":"涡阳县", "CityID":341600, "AreaSort":341600},
+{"AreaID":340421, "name":"凤台县", "CityID":340400, "AreaSort":340400},
+{"AreaID":340406, "name":"潘集区", "CityID":340400, "AreaSort":340400},
+{"AreaID":340422, "name":"寿县", "CityID":340400, "AreaSort":340400},
+{"AreaID":340405, "name":"八公山区", "CityID":340400, "AreaSort":340400},
+{"AreaID":340404, "name":"谢家集区", "CityID":340400, "AreaSort":340400},
+{"AreaID":340403, "name":"田家庵区", "CityID":340400, "AreaSort":340400},
+{"AreaID":340402, "name":"大通区", "CityID":340400, "AreaSort":340400},
+{"AreaID":340304, "name":"禹会区", "CityID":340300, "AreaSort":340300},
+{"AreaID":340322, "name":"五河县", "CityID":340300, "AreaSort":340300},
+{"AreaID":340323, "name":"固镇县", "CityID":340300, "AreaSort":340300},
+{"AreaID":340311, "name":"淮上区", "CityID":340300, "AreaSort":340300},
+{"AreaID":340302, "name":"龙子湖区", "CityID":340300, "AreaSort":340300},
+{"AreaID":340321, "name":"怀远县", "CityID":340300, "AreaSort":340300},
+{"AreaID":340303, "name":"蚌山区", "CityID":340300, "AreaSort":340300},
+{"AreaID":341024, "name":"祁门县", "CityID":341000, "AreaSort":341000},
+{"AreaID":341023, "name":"黟县", "CityID":341000, "AreaSort":341000},
+{"AreaID":341021, "name":"歙县", "CityID":341000, "AreaSort":341000},
+{"AreaID":341022, "name":"休宁县", "CityID":341000, "AreaSort":341000},
+{"AreaID":341004, "name":"徽州区", "CityID":341000, "AreaSort":341000},
+{"AreaID":341002, "name":"屯溪区", "CityID":341000, "AreaSort":341000},
+{"AreaID":341003, "name":"黄山区", "CityID":341000, "AreaSort":341000},
+{"AreaID":350881, "name":"漳平市", "CityID":350800, "AreaSort":350800},
+{"AreaID":350802, "name":"新罗区", "CityID":350800, "AreaSort":350800},
+{"AreaID":350803, "name":"永定区", "CityID":350800, "AreaSort":350800},
+{"AreaID":350825, "name":"连城县", "CityID":350800, "AreaSort":350800},
+{"AreaID":350824, "name":"武平县", "CityID":350800, "AreaSort":350800},
+{"AreaID":350823, "name":"上杭县", "CityID":350800, "AreaSort":350800},
+{"AreaID":350821, "name":"长汀县", "CityID":350800, "AreaSort":350800},
+{"AreaID":350425, "name":"大田县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350424, "name":"宁化县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350427, "name":"沙县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350426, "name":"尤溪县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350429, "name":"泰宁县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350428, "name":"将乐县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350481, "name":"永安市", "CityID":350400, "AreaSort":350400},
+{"AreaID":350430, "name":"建宁县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350421, "name":"明溪县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350402, "name":"梅列区", "CityID":350400, "AreaSort":350400},
+{"AreaID":350403, "name":"三元区", "CityID":350400, "AreaSort":350400},
+{"AreaID":350423, "name":"清流县", "CityID":350400, "AreaSort":350400},
+{"AreaID":350724, "name":"松溪县", "CityID":350700, "AreaSort":350700},
+{"AreaID":350723, "name":"光泽县", "CityID":350700, "AreaSort":350700},
+{"AreaID":350782, "name":"武夷山市", "CityID":350700, "AreaSort":350700},
+{"AreaID":350722, "name":"浦城县", "CityID":350700, "AreaSort":350700},
+{"AreaID":350781, "name":"邵武市", "CityID":350700, "AreaSort":350700},
+{"AreaID":350721, "name":"顺昌县", "CityID":350700, "AreaSort":350700},
+{"AreaID":350703, "name":"建阳区", "CityID":350700, "AreaSort":350700},
+{"AreaID":350702, "name":"延平区", "CityID":350700, "AreaSort":350700},
+{"AreaID":350783, "name":"建瓯市", "CityID":350700, "AreaSort":350700},
+{"AreaID":350725, "name":"政和县", "CityID":350700, "AreaSort":350700},
+{"AreaID":350322, "name":"仙游县", "CityID":350300, "AreaSort":350300},
+{"AreaID":350302, "name":"城厢区", "CityID":350300, "AreaSort":350300},
+{"AreaID":350305, "name":"秀屿区", "CityID":350300, "AreaSort":350300},
+{"AreaID":350303, "name":"涵江区", "CityID":350300, "AreaSort":350300},
+{"AreaID":350304, "name":"荔城区", "CityID":350300, "AreaSort":350300},
+{"AreaID":350206, "name":"湖里区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350213, "name":"翔安区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350212, "name":"同安区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350211, "name":"集美区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350205, "name":"海沧区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350203, "name":"思明区", "CityID":350200, "AreaSort":350200},
+{"AreaID":350181, "name":"福清市", "CityID":350100, "AreaSort":350100},
+{"AreaID":350182, "name":"长乐市", "CityID":350100, "AreaSort":350100},
+{"AreaID":350105, "name":"马尾区", "CityID":350100, "AreaSort":350100},
+{"AreaID":350128, "name":"平潭县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350124, "name":"闽清县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350123, "name":"罗源县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350125, "name":"永泰县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350102, "name":"鼓楼区", "CityID":350100, "AreaSort":350100},
+{"AreaID":350111, "name":"晋安区", "CityID":350100, "AreaSort":350100},
+{"AreaID":350104, "name":"仓山区", "CityID":350100, "AreaSort":350100},
+{"AreaID":350122, "name":"连江县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350103, "name":"台江区", "CityID":350100, "AreaSort":350100},
+{"AreaID":350121, "name":"闽侯县", "CityID":350100, "AreaSort":350100},
+{"AreaID":350622, "name":"云霄县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350603, "name":"龙文区", "CityID":350600, "AreaSort":350600},
+{"AreaID":350623, "name":"漳浦县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350602, "name":"芗城区", "CityID":350600, "AreaSort":350600},
+{"AreaID":350624, "name":"诏安县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350625, "name":"长泰县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350681, "name":"龙海市", "CityID":350600, "AreaSort":350600},
+{"AreaID":350626, "name":"东山县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350627, "name":"南靖县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350628, "name":"平和县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350629, "name":"华安县", "CityID":350600, "AreaSort":350600},
+{"AreaID":350922, "name":"古田县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350921, "name":"霞浦县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350902, "name":"蕉城区", "CityID":350900, "AreaSort":350900},
+{"AreaID":350982, "name":"福鼎市", "CityID":350900, "AreaSort":350900},
+{"AreaID":350926, "name":"柘荣县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350981, "name":"福安市", "CityID":350900, "AreaSort":350900},
+{"AreaID":350925, "name":"周宁县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350924, "name":"寿宁县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350923, "name":"屏南县", "CityID":350900, "AreaSort":350900},
+{"AreaID":350527, "name":"金门县", "CityID":350500, "AreaSort":350500},
+{"AreaID":350502, "name":"鲤城区", "CityID":350500, "AreaSort":350500},
+{"AreaID":350503, "name":"丰泽区", "CityID":350500, "AreaSort":350500},
+{"AreaID":350504, "name":"洛江区", "CityID":350500, "AreaSort":350500},
+{"AreaID":350505, "name":"泉港区", "CityID":350500, "AreaSort":350500},
+{"AreaID":350524, "name":"安溪县", "CityID":350500, "AreaSort":350500},
+{"AreaID":350525, "name":"永春县", "CityID":350500, "AreaSort":350500},
+{"AreaID":350526, "name":"德化县", "CityID":350500, "AreaSort":350500},
+{"AreaID":350583, "name":"南安市", "CityID":350500, "AreaSort":350500},
+{"AreaID":350581, "name":"石狮市", "CityID":350500, "AreaSort":350500},
+{"AreaID":350521, "name":"惠安县", "CityID":350500, "AreaSort":350500},
+{"AreaID":350582, "name":"晋江市", "CityID":350500, "AreaSort":350500},
+{"AreaID":360828, "name":"万安县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360827, "name":"遂川县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360803, "name":"青原区", "CityID":360800, "AreaSort":360800},
+{"AreaID":360802, "name":"吉州区", "CityID":360800, "AreaSort":360800},
+{"AreaID":360829, "name":"安福县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360823, "name":"峡江县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360824, "name":"新干县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360830, "name":"永新县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360825, "name":"永丰县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360826, "name":"泰和县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360881, "name":"井冈山市", "CityID":360800, "AreaSort":360800},
+{"AreaID":360821, "name":"吉安县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360822, "name":"吉水县", "CityID":360800, "AreaSort":360800},
+{"AreaID":360321, "name":"莲花县", "CityID":360300, "AreaSort":360300},
+{"AreaID":360323, "name":"芦溪县", "CityID":360300, "AreaSort":360300},
+{"AreaID":360322, "name":"上栗县", "CityID":360300, "AreaSort":360300},
+{"AreaID":360313, "name":"湘东区", "CityID":360300, "AreaSort":360300},
+{"AreaID":360302, "name":"安源区", "CityID":360300, "AreaSort":360300},
+{"AreaID":361102, "name":"信州区", "CityID":361100, "AreaSort":361100},
+{"AreaID":361130, "name":"婺源县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361121, "name":"上饶县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361103, "name":"广丰区", "CityID":361100, "AreaSort":361100},
+{"AreaID":361124, "name":"铅山县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361123, "name":"玉山县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361126, "name":"弋阳县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361181, "name":"德兴市", "CityID":361100, "AreaSort":361100},
+{"AreaID":361125, "name":"横峰县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361128, "name":"鄱阳县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361127, "name":"余干县", "CityID":361100, "AreaSort":361100},
+{"AreaID":361129, "name":"万年县", "CityID":361100, "AreaSort":361100},
+{"AreaID":360781, "name":"瑞金市", "CityID":360700, "AreaSort":360700},
+{"AreaID":360729, "name":"全南县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360728, "name":"定南县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360702, "name":"章贡区", "CityID":360700, "AreaSort":360700},
+{"AreaID":360730, "name":"宁都县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360703, "name":"南康区", "CityID":360700, "AreaSort":360700},
+{"AreaID":360721, "name":"赣县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360722, "name":"信丰县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360723, "name":"大余县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360724, "name":"上犹县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360725, "name":"崇义县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360726, "name":"安远县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360727, "name":"龙南县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360735, "name":"石城县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360734, "name":"寻乌县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360733, "name":"会昌县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360732, "name":"兴国县", "CityID":360700, "AreaSort":360700},
+{"AreaID":360731, "name":"于都县", "CityID":360700, "AreaSort":360700},
+{"AreaID":361027, "name":"金溪县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361026, "name":"宜黄县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361025, "name":"乐安县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361024, "name":"崇仁县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361023, "name":"南丰县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361022, "name":"黎川县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361021, "name":"南城县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361030, "name":"广昌县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361029, "name":"东乡县", "CityID":361000, "AreaSort":361000},
+{"AreaID":361002, "name":"临川区", "CityID":361000, "AreaSort":361000},
+{"AreaID":361028, "name":"资溪县", "CityID":361000, "AreaSort":361000},
+{"AreaID":360428, "name":"都昌县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360481, "name":"瑞昌市", "CityID":360400, "AreaSort":360400},
+{"AreaID":360482, "name":"共青城市", "CityID":360400, "AreaSort":360400},
+{"AreaID":360427, "name":"星子县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360429, "name":"湖口县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360403, "name":"浔阳区", "CityID":360400, "AreaSort":360400},
+{"AreaID":360424, "name":"修水县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360423, "name":"武宁县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360426, "name":"德安县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360402, "name":"庐山区", "CityID":360400, "AreaSort":360400},
+{"AreaID":360425, "name":"永修县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360421, "name":"九江县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360430, "name":"彭泽县", "CityID":360400, "AreaSort":360400},
+{"AreaID":360105, "name":"湾里区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360104, "name":"青云谱区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360121, "name":"南昌县", "CityID":360100, "AreaSort":360100},
+{"AreaID":360103, "name":"西湖区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360102, "name":"东湖区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360123, "name":"安义县", "CityID":360100, "AreaSort":360100},
+{"AreaID":360112, "name":"新建区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360124, "name":"进贤县", "CityID":360100, "AreaSort":360100},
+{"AreaID":360111, "name":"青山湖区", "CityID":360100, "AreaSort":360100},
+{"AreaID":360521, "name":"分宜县", "CityID":360500, "AreaSort":360500},
+{"AreaID":360502, "name":"渝水区", "CityID":360500, "AreaSort":360500},
+{"AreaID":360981, "name":"丰城市", "CityID":360900, "AreaSort":360900},
+{"AreaID":360983, "name":"高安市", "CityID":360900, "AreaSort":360900},
+{"AreaID":360926, "name":"铜鼓县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360982, "name":"樟树市", "CityID":360900, "AreaSort":360900},
+{"AreaID":360921, "name":"奉新县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360902, "name":"袁州区", "CityID":360900, "AreaSort":360900},
+{"AreaID":360925, "name":"靖安县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360924, "name":"宜丰县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360923, "name":"上高县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360922, "name":"万载县", "CityID":360900, "AreaSort":360900},
+{"AreaID":360222, "name":"浮梁县", "CityID":360200, "AreaSort":360200},
+{"AreaID":360203, "name":"珠山区", "CityID":360200, "AreaSort":360200},
+{"AreaID":360281, "name":"乐平市", "CityID":360200, "AreaSort":360200},
+{"AreaID":360202, "name":"昌江区", "CityID":360200, "AreaSort":360200},
+{"AreaID":360622, "name":"余江县", "CityID":360600, "AreaSort":360600},
+{"AreaID":360681, "name":"贵溪市", "CityID":360600, "AreaSort":360600},
+{"AreaID":360602, "name":"月湖区", "CityID":360600, "AreaSort":360600},
+{"AreaID":371311, "name":"罗庄区", "CityID":371300, "AreaSort":371300},
+{"AreaID":371312, "name":"河东区", "CityID":371300, "AreaSort":371300},
+{"AreaID":371322, "name":"郯城县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371323, "name":"沂水县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371321, "name":"沂南县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371326, "name":"平邑县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371327, "name":"莒南县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371324, "name":"兰陵县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371325, "name":"费县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371328, "name":"蒙阴县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371302, "name":"兰山区", "CityID":371300, "AreaSort":371300},
+{"AreaID":371329, "name":"临沭县", "CityID":371300, "AreaSort":371300},
+{"AreaID":371724, "name":"巨野县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371725, "name":"郓城县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371726, "name":"鄄城县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371727, "name":"定陶县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371702, "name":"牡丹区", "CityID":371700, "AreaSort":371700},
+{"AreaID":371721, "name":"曹县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371722, "name":"单县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371723, "name":"成武县", "CityID":371700, "AreaSort":371700},
+{"AreaID":371728, "name":"东明县", "CityID":371700, "AreaSort":371700},
+{"AreaID":370502, "name":"东营区", "CityID":370500, "AreaSort":370500},
+{"AreaID":370523, "name":"广饶县", "CityID":370500, "AreaSort":370500},
+{"AreaID":370521, "name":"垦利县", "CityID":370500, "AreaSort":370500},
+{"AreaID":370503, "name":"河口区", "CityID":370500, "AreaSort":370500},
+{"AreaID":370522, "name":"利津县", "CityID":370500, "AreaSort":370500},
+{"AreaID":371002, "name":"环翠区", "CityID":371000, "AreaSort":371000},
+{"AreaID":371003, "name":"文登区", "CityID":371000, "AreaSort":371000},
+{"AreaID":371082, "name":"荣成市", "CityID":371000, "AreaSort":371000},
+{"AreaID":371083, "name":"乳山市", "CityID":371000, "AreaSort":371000},
+{"AreaID":370282, "name":"即墨市", "CityID":370200, "AreaSort":370200},
+{"AreaID":370283, "name":"平度市", "CityID":370200, "AreaSort":370200},
+{"AreaID":370285, "name":"莱西市", "CityID":370200, "AreaSort":370200},
+{"AreaID":370214, "name":"城阳区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370202, "name":"市南区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370213, "name":"李沧区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370203, "name":"市北区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370212, "name":"崂山区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370211, "name":"黄岛区", "CityID":370200, "AreaSort":370200},
+{"AreaID":370281, "name":"胶州市", "CityID":370200, "AreaSort":370200},
+{"AreaID":370883, "name":"邹城市", "CityID":370800, "AreaSort":370800},
+{"AreaID":370881, "name":"曲阜市", "CityID":370800, "AreaSort":370800},
+{"AreaID":370832, "name":"梁山县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370831, "name":"泗水县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370830, "name":"汶上县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370812, "name":"兖州区", "CityID":370800, "AreaSort":370800},
+{"AreaID":370811, "name":"任城区", "CityID":370800, "AreaSort":370800},
+{"AreaID":370826, "name":"微山县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370827, "name":"鱼台县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370828, "name":"金乡县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370829, "name":"嘉祥县", "CityID":370800, "AreaSort":370800},
+{"AreaID":370705, "name":"奎文区", "CityID":370700, "AreaSort":370700},
+{"AreaID":370784, "name":"安丘市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370783, "name":"寿光市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370782, "name":"诸城市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370781, "name":"青州市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370724, "name":"临朐县", "CityID":370700, "AreaSort":370700},
+{"AreaID":370786, "name":"昌邑市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370785, "name":"高密市", "CityID":370700, "AreaSort":370700},
+{"AreaID":370725, "name":"昌乐县", "CityID":370700, "AreaSort":370700},
+{"AreaID":370702, "name":"潍城区", "CityID":370700, "AreaSort":370700},
+{"AreaID":370704, "name":"坊子区", "CityID":370700, "AreaSort":370700},
+{"AreaID":370703, "name":"寒亭区", "CityID":370700, "AreaSort":370700},
+{"AreaID":371622, "name":"阳信县", "CityID":371600, "AreaSort":371600},
+{"AreaID":371621, "name":"惠民县", "CityID":371600, "AreaSort":371600},
+{"AreaID":371623, "name":"无棣县", "CityID":371600, "AreaSort":371600},
+{"AreaID":371626, "name":"邹平县", "CityID":371600, "AreaSort":371600},
+{"AreaID":371625, "name":"博兴县", "CityID":371600, "AreaSort":371600},
+{"AreaID":371603, "name":"沾化区", "CityID":371600, "AreaSort":371600},
+{"AreaID":371602, "name":"滨城区", "CityID":371600, "AreaSort":371600},
+{"AreaID":370102, "name":"历下区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370113, "name":"长清区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370112, "name":"历城区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370124, "name":"平阴县", "CityID":370100, "AreaSort":370100},
+{"AreaID":370126, "name":"商河县", "CityID":370100, "AreaSort":370100},
+{"AreaID":370125, "name":"济阳县", "CityID":370100, "AreaSort":370100},
+{"AreaID":370181, "name":"章丘市", "CityID":370100, "AreaSort":370100},
+{"AreaID":370104, "name":"槐荫区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370103, "name":"市中区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370105, "name":"天桥区", "CityID":370100, "AreaSort":370100},
+{"AreaID":370321, "name":"桓台县", "CityID":370300, "AreaSort":370300},
+{"AreaID":370322, "name":"高青县", "CityID":370300, "AreaSort":370300},
+{"AreaID":370303, "name":"张店区", "CityID":370300, "AreaSort":370300},
+{"AreaID":370304, "name":"博山区", "CityID":370300, "AreaSort":370300},
+{"AreaID":370302, "name":"淄川区", "CityID":370300, "AreaSort":370300},
+{"AreaID":370323, "name":"沂源县", "CityID":370300, "AreaSort":370300},
+{"AreaID":370305, "name":"临淄区", "CityID":370300, "AreaSort":370300},
+{"AreaID":370306, "name":"周村区", "CityID":370300, "AreaSort":370300},
+{"AreaID":370911, "name":"岱岳区", "CityID":370900, "AreaSort":370900},
+{"AreaID":370983, "name":"肥城市", "CityID":370900, "AreaSort":370900},
+{"AreaID":370923, "name":"东平县", "CityID":370900, "AreaSort":370900},
+{"AreaID":370921, "name":"宁阳县", "CityID":370900, "AreaSort":370900},
+{"AreaID":370902, "name":"泰山区", "CityID":370900, "AreaSort":370900},
+{"AreaID":370982, "name":"新泰市", "CityID":370900, "AreaSort":370900},
+{"AreaID":370602, "name":"芝罘区", "CityID":370600, "AreaSort":370600},
+{"AreaID":370687, "name":"海阳市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370686, "name":"栖霞市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370685, "name":"招远市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370684, "name":"蓬莱市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370683, "name":"莱州市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370611, "name":"福山区", "CityID":370600, "AreaSort":370600},
+{"AreaID":370682, "name":"莱阳市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370612, "name":"牟平区", "CityID":370600, "AreaSort":370600},
+{"AreaID":370681, "name":"龙口市", "CityID":370600, "AreaSort":370600},
+{"AreaID":370613, "name":"莱山区", "CityID":370600, "AreaSort":370600},
+{"AreaID":370634, "name":"长岛县", "CityID":370600, "AreaSort":370600},
+{"AreaID":371203, "name":"钢城区", "CityID":371200, "AreaSort":371200},
+{"AreaID":371202, "name":"莱城区", "CityID":371200, "AreaSort":371200},
+{"AreaID":371521, "name":"阳谷县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371526, "name":"高唐县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371502, "name":"东昌府区", "CityID":371500, "AreaSort":371500},
+{"AreaID":371523, "name":"茌平县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371522, "name":"莘县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371581, "name":"临清市", "CityID":371500, "AreaSort":371500},
+{"AreaID":371525, "name":"冠县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371524, "name":"东阿县", "CityID":371500, "AreaSort":371500},
+{"AreaID":371482, "name":"禹城市", "CityID":371400, "AreaSort":371400},
+{"AreaID":371427, "name":"夏津县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371481, "name":"乐陵市", "CityID":371400, "AreaSort":371400},
+{"AreaID":371428, "name":"武城县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371425, "name":"齐河县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371402, "name":"德城区", "CityID":371400, "AreaSort":371400},
+{"AreaID":371426, "name":"平原县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371423, "name":"庆云县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371424, "name":"临邑县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371403, "name":"陵城区", "CityID":371400, "AreaSort":371400},
+{"AreaID":371422, "name":"宁津县", "CityID":371400, "AreaSort":371400},
+{"AreaID":371122, "name":"莒县", "CityID":371100, "AreaSort":371100},
+{"AreaID":371102, "name":"东港区", "CityID":371100, "AreaSort":371100},
+{"AreaID":371121, "name":"五莲县", "CityID":371100, "AreaSort":371100},
+{"AreaID":371103, "name":"岚山区", "CityID":371100, "AreaSort":371100},
+{"AreaID":370481, "name":"滕州市", "CityID":370400, "AreaSort":370400},
+{"AreaID":370406, "name":"山亭区", "CityID":370400, "AreaSort":370400},
+{"AreaID":370405, "name":"台儿庄区", "CityID":370400, "AreaSort":370400},
+{"AreaID":370404, "name":"峄城区", "CityID":370400, "AreaSort":370400},
+{"AreaID":370403, "name":"薛城区", "CityID":370400, "AreaSort":370400},
+{"AreaID":370402, "name":"市中区", "CityID":370400, "AreaSort":370400},
+{"AreaID":410611, "name":"淇滨区", "CityID":410600, "AreaSort":410600},
+{"AreaID":410621, "name":"浚县", "CityID":410600, "AreaSort":410600},
+{"AreaID":410603, "name":"山城区", "CityID":410600, "AreaSort":410600},
+{"AreaID":410622, "name":"淇县", "CityID":410600, "AreaSort":410600},
+{"AreaID":410602, "name":"鹤山区", "CityID":410600, "AreaSort":410600},
+{"AreaID":410204, "name":"鼓楼区", "CityID":410200, "AreaSort":410200},
+{"AreaID":410212, "name":"祥符区", "CityID":410200, "AreaSort":410200},
+{"AreaID":410203, "name":"顺河回族区", "CityID":410200, "AreaSort":410200},
+{"AreaID":410202, "name":"龙亭区", "CityID":410200, "AreaSort":410200},
+{"AreaID":410225, "name":"兰考县", "CityID":410200, "AreaSort":410200},
+{"AreaID":410223, "name":"尉氏县", "CityID":410200, "AreaSort":410200},
+{"AreaID":410205, "name":"禹王台区", "CityID":410200, "AreaSort":410200},
+{"AreaID":410221, "name":"杞县", "CityID":410200, "AreaSort":410200},
+{"AreaID":410222, "name":"通许县", "CityID":410200, "AreaSort":410200},
+{"AreaID":410728, "name":"长垣县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410703, "name":"卫滨区", "CityID":410700, "AreaSort":410700},
+{"AreaID":410711, "name":"牧野区", "CityID":410700, "AreaSort":410700},
+{"AreaID":410702, "name":"红旗区", "CityID":410700, "AreaSort":410700},
+{"AreaID":410726, "name":"延津县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410727, "name":"封丘县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410721, "name":"新乡县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410782, "name":"辉县市", "CityID":410700, "AreaSort":410700},
+{"AreaID":410724, "name":"获嘉县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410725, "name":"原阳县", "CityID":410700, "AreaSort":410700},
+{"AreaID":410781, "name":"卫辉市", "CityID":410700, "AreaSort":410700},
+{"AreaID":410704, "name":"凤泉区", "CityID":410700, "AreaSort":410700},
+{"AreaID":411628, "name":"鹿邑县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411602, "name":"川汇区", "CityID":411600, "AreaSort":411600},
+{"AreaID":411621, "name":"扶沟县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411622, "name":"西华县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411623, "name":"商水县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411624, "name":"沈丘县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411681, "name":"项城市", "CityID":411600, "AreaSort":411600},
+{"AreaID":411625, "name":"郸城县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411626, "name":"淮阳县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411627, "name":"太康县", "CityID":411600, "AreaSort":411600},
+{"AreaID":411282, "name":"灵宝市", "CityID":411200, "AreaSort":411200},
+{"AreaID":411202, "name":"湖滨区", "CityID":411200, "AreaSort":411200},
+{"AreaID":411203, "name":"陕州区", "CityID":411200, "AreaSort":411200},
+{"AreaID":411224, "name":"卢氏县", "CityID":411200, "AreaSort":411200},
+{"AreaID":411221, "name":"渑池县", "CityID":411200, "AreaSort":411200},
+{"AreaID":411281, "name":"义马市", "CityID":411200, "AreaSort":411200},
+{"AreaID":410411, "name":"湛河区", "CityID":410400, "AreaSort":410400},
+{"AreaID":410402, "name":"新华区", "CityID":410400, "AreaSort":410400},
+{"AreaID":410425, "name":"郏县", "CityID":410400, "AreaSort":410400},
+{"AreaID":410423, "name":"鲁山县", "CityID":410400, "AreaSort":410400},
+{"AreaID":410481, "name":"舞钢市", "CityID":410400, "AreaSort":410400},
+{"AreaID":410421, "name":"宝丰县", "CityID":410400, "AreaSort":410400},
+{"AreaID":410403, "name":"卫东区", "CityID":410400, "AreaSort":410400},
+{"AreaID":410482, "name":"汝州市", "CityID":410400, "AreaSort":410400},
+{"AreaID":410422, "name":"叶县", "CityID":410400, "AreaSort":410400},
+{"AreaID":410404, "name":"石龙区", "CityID":410400, "AreaSort":410400},
+{"AreaID":411422, "name":"睢县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411423, "name":"宁陵县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411424, "name":"柘城县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411425, "name":"虞城县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411426, "name":"夏邑县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411481, "name":"永城市", "CityID":411400, "AreaSort":411400},
+{"AreaID":411421, "name":"民权县", "CityID":411400, "AreaSort":411400},
+{"AreaID":411403, "name":"睢阳区", "CityID":411400, "AreaSort":411400},
+{"AreaID":411402, "name":"梁园区", "CityID":411400, "AreaSort":411400},
+{"AreaID":410902, "name":"华龙区", "CityID":410900, "AreaSort":410900},
+{"AreaID":410923, "name":"南乐县", "CityID":410900, "AreaSort":410900},
+{"AreaID":410922, "name":"清丰县", "CityID":410900, "AreaSort":410900},
+{"AreaID":410927, "name":"台前县", "CityID":410900, "AreaSort":410900},
+{"AreaID":410926, "name":"范县", "CityID":410900, "AreaSort":410900},
+{"AreaID":410928, "name":"濮阳县", "CityID":410900, "AreaSort":410900},
+{"AreaID":411525, "name":"固始县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411526, "name":"潢川县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411527, "name":"淮滨县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411528, "name":"息县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411502, "name":"浉河区", "CityID":411500, "AreaSort":411500},
+{"AreaID":411521, "name":"罗山县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411503, "name":"平桥区", "CityID":411500, "AreaSort":411500},
+{"AreaID":411522, "name":"光山县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411523, "name":"新县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411524, "name":"商城县", "CityID":411500, "AreaSort":411500},
+{"AreaID":411102, "name":"源汇区", "CityID":411100, "AreaSort":411100},
+{"AreaID":411121, "name":"舞阳县", "CityID":411100, "AreaSort":411100},
+{"AreaID":411122, "name":"临颍县", "CityID":411100, "AreaSort":411100},
+{"AreaID":411104, "name":"召陵区", "CityID":411100, "AreaSort":411100},
+{"AreaID":411103, "name":"郾城区", "CityID":411100, "AreaSort":411100},
+{"AreaID":411327, "name":"社旗县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411302, "name":"宛城区", "CityID":411300, "AreaSort":411300},
+{"AreaID":411328, "name":"唐河县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411303, "name":"卧龙区", "CityID":411300, "AreaSort":411300},
+{"AreaID":411329, "name":"新野县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411323, "name":"西峡县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411381, "name":"邓州市", "CityID":411300, "AreaSort":411300},
+{"AreaID":411324, "name":"镇平县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411325, "name":"内乡县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411326, "name":"淅川县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411322, "name":"方城县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411321, "name":"南召县", "CityID":411300, "AreaSort":411300},
+{"AreaID":411330, "name":"桐柏县", "CityID":411300, "AreaSort":411300},
+{"AreaID":410306, "name":"吉利区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410304, "name":"瀍河回族区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410305, "name":"涧西区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410311, "name":"洛龙区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410302, "name":"老城区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410303, "name":"西工区", "CityID":410300, "AreaSort":410300},
+{"AreaID":410381, "name":"偃师市", "CityID":410300, "AreaSort":410300},
+{"AreaID":410325, "name":"嵩县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410324, "name":"栾川县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410323, "name":"新安县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410322, "name":"孟津县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410329, "name":"伊川县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410328, "name":"洛宁县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410327, "name":"宜阳县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410326, "name":"汝阳县", "CityID":410300, "AreaSort":410300},
+{"AreaID":410181, "name":"巩义市", "CityID":410100, "AreaSort":410100},
+{"AreaID":410122, "name":"中牟县", "CityID":410100, "AreaSort":410100},
+{"AreaID":410108, "name":"惠济区", "CityID":410100, "AreaSort":410100},
+{"AreaID":410106, "name":"上街区", "CityID":410100, "AreaSort":410100},
+{"AreaID":410184, "name":"新郑市", "CityID":410100, "AreaSort":410100},
+{"AreaID":410104, "name":"管城回族区", "CityID":410100, "AreaSort":410100},
+{"AreaID":410185, "name":"登封市", "CityID":410100, "AreaSort":410100},
+{"AreaID":410105, "name":"金水区", "CityID":410100, "AreaSort":410100},
+{"AreaID":410182, "name":"荥阳市", "CityID":410100, "AreaSort":410100},
+{"AreaID":410102, "name":"中原区", "CityID":410100, "AreaSort":410100},
+{"AreaID":410183, "name":"新密市", "CityID":410100, "AreaSort":410100},
+{"AreaID":410103, "name":"二七区", "CityID":410100, "AreaSort":410100},
+{"AreaID":411729, "name":"新蔡县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411728, "name":"遂平县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411727, "name":"汝南县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411726, "name":"泌阳县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411725, "name":"确山县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411724, "name":"正阳县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411723, "name":"平舆县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411722, "name":"上蔡县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411721, "name":"西平县", "CityID":411700, "AreaSort":411700},
+{"AreaID":411702, "name":"驿城区", "CityID":411700, "AreaSort":411700},
+{"AreaID":411023, "name":"许昌县", "CityID":411000, "AreaSort":411000},
+{"AreaID":411025, "name":"襄城县", "CityID":411000, "AreaSort":411000},
+{"AreaID":411024, "name":"鄢陵县", "CityID":411000, "AreaSort":411000},
+{"AreaID":411082, "name":"长葛市", "CityID":411000, "AreaSort":411000},
+{"AreaID":411081, "name":"禹州市", "CityID":411000, "AreaSort":411000},
+{"AreaID":411002, "name":"魏都区", "CityID":411000, "AreaSort":411000},
+{"AreaID":410804, "name":"马村区", "CityID":410800, "AreaSort":410800},
+{"AreaID":410803, "name":"中站区", "CityID":410800, "AreaSort":410800},
+{"AreaID":410825, "name":"温县", "CityID":410800, "AreaSort":410800},
+{"AreaID":410883, "name":"孟州市", "CityID":410800, "AreaSort":410800},
+{"AreaID":410823, "name":"武陟县", "CityID":410800, "AreaSort":410800},
+{"AreaID":410882, "name":"沁阳市", "CityID":410800, "AreaSort":410800},
+{"AreaID":410822, "name":"博爱县", "CityID":410800, "AreaSort":410800},
+{"AreaID":410821, "name":"修武县", "CityID":410800, "AreaSort":410800},
+{"AreaID":410811, "name":"山阳区", "CityID":410800, "AreaSort":410800},
+{"AreaID":410802, "name":"解放区", "CityID":410800, "AreaSort":410800},
+{"AreaID":410522, "name":"安阳县", "CityID":410500, "AreaSort":410500},
+{"AreaID":410523, "name":"汤阴县", "CityID":410500, "AreaSort":410500},
+{"AreaID":410581, "name":"林州市", "CityID":410500, "AreaSort":410500},
+{"AreaID":410526, "name":"滑县", "CityID":410500, "AreaSort":410500},
+{"AreaID":410527, "name":"内黄县", "CityID":410500, "AreaSort":410500},
+{"AreaID":410506, "name":"龙安区", "CityID":410500, "AreaSort":410500},
+{"AreaID":410503, "name":"北关区", "CityID":410500, "AreaSort":410500},
+{"AreaID":410502, "name":"文峰区", "CityID":410500, "AreaSort":410500},
+{"AreaID":410505, "name":"殷都区", "CityID":410500, "AreaSort":410500},
+{"AreaID":420881, "name":"钟祥市", "CityID":420800, "AreaSort":420800},
+{"AreaID":420822, "name":"沙洋县", "CityID":420800, "AreaSort":420800},
+{"AreaID":420821, "name":"京山县", "CityID":420800, "AreaSort":420800},
+{"AreaID":420804, "name":"掇刀区", "CityID":420800, "AreaSort":420800},
+{"AreaID":420802, "name":"东宝区", "CityID":420800, "AreaSort":420800},
+{"AreaID":421123, "name":"罗田县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421122, "name":"红安县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421181, "name":"麻城市", "CityID":421100, "AreaSort":421100},
+{"AreaID":421121, "name":"团风县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421124, "name":"英山县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421182, "name":"武穴市", "CityID":421100, "AreaSort":421100},
+{"AreaID":421125, "name":"浠水县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421126, "name":"蕲春县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421127, "name":"黄梅县", "CityID":421100, "AreaSort":421100},
+{"AreaID":421102, "name":"黄州区", "CityID":421100, "AreaSort":421100},
+{"AreaID":420981, "name":"应城市", "CityID":420900, "AreaSort":420900},
+{"AreaID":420982, "name":"安陆市", "CityID":420900, "AreaSort":420900},
+{"AreaID":420984, "name":"汉川市", "CityID":420900, "AreaSort":420900},
+{"AreaID":420923, "name":"云梦县", "CityID":420900, "AreaSort":420900},
+{"AreaID":420922, "name":"大悟县", "CityID":420900, "AreaSort":420900},
+{"AreaID":420921, "name":"孝昌县", "CityID":420900, "AreaSort":420900},
+{"AreaID":420902, "name":"孝南区", "CityID":420900, "AreaSort":420900},
+{"AreaID":421223, "name":"崇阳县", "CityID":421200, "AreaSort":421200},
+{"AreaID":421224, "name":"通山县", "CityID":421200, "AreaSort":421200},
+{"AreaID":421222, "name":"通城县", "CityID":421200, "AreaSort":421200},
+{"AreaID":421202, "name":"咸安区", "CityID":421200, "AreaSort":421200},
+{"AreaID":421221, "name":"嘉鱼县", "CityID":421200, "AreaSort":421200},
+{"AreaID":421281, "name":"赤壁市", "CityID":421200, "AreaSort":421200},
+{"AreaID":421381, "name":"广水市", "CityID":421300, "AreaSort":421300},
+{"AreaID":421303, "name":"曾都区", "CityID":421300, "AreaSort":421300},
+{"AreaID":421321, "name":"随县", "CityID":421300, "AreaSort":421300},
+{"AreaID":420325, "name":"房县", "CityID":420300, "AreaSort":420300},
+{"AreaID":420381, "name":"丹江口市", "CityID":420300, "AreaSort":420300},
+{"AreaID":420322, "name":"郧西县", "CityID":420300, "AreaSort":420300},
+{"AreaID":420323, "name":"竹山县", "CityID":420300, "AreaSort":420300},
+{"AreaID":420324, "name":"竹溪县", "CityID":420300, "AreaSort":420300},
+{"AreaID":420302, "name":"茅箭区", "CityID":420300, "AreaSort":420300},
+{"AreaID":420304, "name":"郧阳区", "CityID":420300, "AreaSort":420300},
+{"AreaID":420303, "name":"张湾区", "CityID":420300, "AreaSort":420300},
+{"AreaID":420626, "name":"保康县", "CityID":420600, "AreaSort":420600},
+{"AreaID":420607, "name":"襄州区", "CityID":420600, "AreaSort":420600},
+{"AreaID":420606, "name":"樊城区", "CityID":420600, "AreaSort":420600},
+{"AreaID":420602, "name":"襄城区", "CityID":420600, "AreaSort":420600},
+{"AreaID":420625, "name":"谷城县", "CityID":420600, "AreaSort":420600},
+{"AreaID":420684, "name":"宜城市", "CityID":420600, "AreaSort":420600},
+{"AreaID":420624, "name":"南漳县", "CityID":420600, "AreaSort":420600},
+{"AreaID":420683, "name":"枣阳市", "CityID":420600, "AreaSort":420600},
+{"AreaID":420682, "name":"老河口市", "CityID":420600, "AreaSort":420600},
+{"AreaID":420504, "name":"点军区", "CityID":420500, "AreaSort":420500},
+{"AreaID":420529, "name":"五峰土家族自治县", "CityID":420500, "AreaSort":420500},
+{"AreaID":420503, "name":"伍家岗区", "CityID":420500, "AreaSort":420500},
+{"AreaID":420502, "name":"西陵区", "CityID":420500, "AreaSort":420500},
+{"AreaID":420527, "name":"秭归县", "CityID":420500, "AreaSort":420500},
+{"AreaID":420528, "name":"长阳土家族自治县", "CityID":420500, "AreaSort":420500},
+{"AreaID":420583, "name":"枝江市", "CityID":420500, "AreaSort":420500},
+{"AreaID":420525, "name":"远安县", "CityID":420500, "AreaSort":420500},
+{"AreaID":420526, "name":"兴山县", "CityID":420500, "AreaSort":420500},
+{"AreaID":420506, "name":"夷陵区", "CityID":420500, "AreaSort":420500},
+{"AreaID":420581, "name":"宜都市", "CityID":420500, "AreaSort":420500},
+{"AreaID":420505, "name":"猇亭区", "CityID":420500, "AreaSort":420500},
+{"AreaID":420582, "name":"当阳市", "CityID":420500, "AreaSort":420500},
+{"AreaID":420114, "name":"蔡甸区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420115, "name":"江夏区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420102, "name":"江岸区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420112, "name":"东西湖区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420103, "name":"江汉区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420113, "name":"汉南区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420104, "name":"硚口区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420105, "name":"汉阳区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420106, "name":"武昌区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420116, "name":"黄陂区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420107, "name":"青山区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420117, "name":"新洲区", "CityID":420100, "AreaSort":420100},
+{"AreaID":420111, "name":"洪山区", "CityID":420100, "AreaSort":420100},
+{"AreaID":422822, "name":"建始县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422823, "name":"巴东县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422825, "name":"宣恩县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422826, "name":"咸丰县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422801, "name":"恩施市", "CityID":422800, "AreaSort":422800},
+{"AreaID":422827, "name":"来凤县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422828, "name":"鹤峰县", "CityID":422800, "AreaSort":422800},
+{"AreaID":422802, "name":"利川市", "CityID":422800, "AreaSort":422800},
+{"AreaID":420703, "name":"华容区", "CityID":420700, "AreaSort":420700},
+{"AreaID":420704, "name":"鄂城区", "CityID":420700, "AreaSort":420700},
+{"AreaID":420702, "name":"梁子湖区", "CityID":420700, "AreaSort":420700},
+{"AreaID":420222, "name":"阳新县", "CityID":420200, "AreaSort":420200},
+{"AreaID":420204, "name":"下陆区", "CityID":420200, "AreaSort":420200},
+{"AreaID":420205, "name":"铁山区", "CityID":420200, "AreaSort":420200},
+{"AreaID":420281, "name":"大冶市", "CityID":420200, "AreaSort":420200},
+{"AreaID":420202, "name":"黄石港区", "CityID":420200, "AreaSort":420200},
+{"AreaID":420203, "name":"西塞山区", "CityID":420200, "AreaSort":420200},
+{"AreaID":421003, "name":"荆州区", "CityID":421000, "AreaSort":421000},
+{"AreaID":421087, "name":"松滋市", "CityID":421000, "AreaSort":421000},
+{"AreaID":421083, "name":"洪湖市", "CityID":421000, "AreaSort":421000},
+{"AreaID":421081, "name":"石首市", "CityID":421000, "AreaSort":421000},
+{"AreaID":421002, "name":"沙市区", "CityID":421000, "AreaSort":421000},
+{"AreaID":421022, "name":"公安县", "CityID":421000, "AreaSort":421000},
+{"AreaID":421023, "name":"监利县", "CityID":421000, "AreaSort":421000},
+{"AreaID":421024, "name":"江陵县", "CityID":421000, "AreaSort":421000},
+{"AreaID":430304, "name":"岳塘区", "CityID":430300, "AreaSort":430300},
+{"AreaID":430302, "name":"雨湖区", "CityID":430300, "AreaSort":430300},
+{"AreaID":430382, "name":"韶山市", "CityID":430300, "AreaSort":430300},
+{"AreaID":430381, "name":"湘乡市", "CityID":430300, "AreaSort":430300},
+{"AreaID":430321, "name":"湘潭县", "CityID":430300, "AreaSort":430300},
+{"AreaID":433122, "name":"泸溪县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433101, "name":"吉首市", "CityID":433100, "AreaSort":433100},
+{"AreaID":433123, "name":"凤凰县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433124, "name":"花垣县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433130, "name":"龙山县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433127, "name":"永顺县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433126, "name":"古丈县", "CityID":433100, "AreaSort":433100},
+{"AreaID":433125, "name":"保靖县", "CityID":433100, "AreaSort":433100},
+{"AreaID":430281, "name":"醴陵市", "CityID":430200, "AreaSort":430200},
+{"AreaID":430223, "name":"攸县", "CityID":430200, "AreaSort":430200},
+{"AreaID":430224, "name":"茶陵县", "CityID":430200, "AreaSort":430200},
+{"AreaID":430221, "name":"株洲县", "CityID":430200, "AreaSort":430200},
+{"AreaID":430203, "name":"芦淞区", "CityID":430200, "AreaSort":430200},
+{"AreaID":430204, "name":"石峰区", "CityID":430200, "AreaSort":430200},
+{"AreaID":430211, "name":"天元区", "CityID":430200, "AreaSort":430200},
+{"AreaID":430202, "name":"荷塘区", "CityID":430200, "AreaSort":430200},
+{"AreaID":430225, "name":"炎陵县", "CityID":430200, "AreaSort":430200},
+{"AreaID":431230, "name":"通道侗族自治县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431221, "name":"中方县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431202, "name":"鹤城区", "CityID":431200, "AreaSort":431200},
+{"AreaID":431222, "name":"沅陵县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431223, "name":"辰溪县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431224, "name":"溆浦县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431225, "name":"会同县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431226, "name":"麻阳苗族自治县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431227, "name":"新晃侗族自治县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431228, "name":"芷江侗族自治县", "CityID":431200, "AreaSort":431200},
+{"AreaID":431281, "name":"洪江市", "CityID":431200, "AreaSort":431200},
+{"AreaID":431229, "name":"靖州苗族侗族自治县", "CityID":431200, "AreaSort":431200},
+{"AreaID":430581, "name":"武冈市", "CityID":430500, "AreaSort":430500},
+{"AreaID":430525, "name":"洞口县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430524, "name":"隆回县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430523, "name":"邵阳县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430522, "name":"新邵县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430521, "name":"邵东县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430511, "name":"北塔区", "CityID":430500, "AreaSort":430500},
+{"AreaID":430502, "name":"双清区", "CityID":430500, "AreaSort":430500},
+{"AreaID":430503, "name":"大祥区", "CityID":430500, "AreaSort":430500},
+{"AreaID":430529, "name":"城步苗族自治县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430528, "name":"新宁县", "CityID":430500, "AreaSort":430500},
+{"AreaID":430527, "name":"绥宁县", "CityID":430500, "AreaSort":430500},
+{"AreaID":431127, "name":"蓝山县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431128, "name":"新田县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431102, "name":"零陵区", "CityID":431100, "AreaSort":431100},
+{"AreaID":431129, "name":"江华瑶族自治县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431103, "name":"冷水滩区", "CityID":431100, "AreaSort":431100},
+{"AreaID":431123, "name":"双牌县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431124, "name":"道县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431125, "name":"江永县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431126, "name":"宁远县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431122, "name":"东安县", "CityID":431100, "AreaSort":431100},
+{"AreaID":431121, "name":"祁阳县", "CityID":431100, "AreaSort":431100},
+{"AreaID":430802, "name":"永定区", "CityID":430800, "AreaSort":430800},
+{"AreaID":430821, "name":"慈利县", "CityID":430800, "AreaSort":430800},
+{"AreaID":430822, "name":"桑植县", "CityID":430800, "AreaSort":430800},
+{"AreaID":430811, "name":"武陵源区", "CityID":430800, "AreaSort":430800},
+{"AreaID":431024, "name":"嘉禾县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431025, "name":"临武县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431026, "name":"汝城县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431027, "name":"桂东县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431028, "name":"安仁县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431081, "name":"资兴市", "CityID":431000, "AreaSort":431000},
+{"AreaID":431023, "name":"永兴县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431003, "name":"苏仙区", "CityID":431000, "AreaSort":431000},
+{"AreaID":431022, "name":"宜章县", "CityID":431000, "AreaSort":431000},
+{"AreaID":431002, "name":"北湖区", "CityID":431000, "AreaSort":431000},
+{"AreaID":431021, "name":"桂阳县", "CityID":431000, "AreaSort":431000},
+{"AreaID":430725, "name":"桃源县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430724, "name":"临澧县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430726, "name":"石门县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430781, "name":"津市市", "CityID":430700, "AreaSort":430700},
+{"AreaID":430721, "name":"安乡县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430702, "name":"武陵区", "CityID":430700, "AreaSort":430700},
+{"AreaID":430703, "name":"鼎城区", "CityID":430700, "AreaSort":430700},
+{"AreaID":430723, "name":"澧县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430722, "name":"汉寿县", "CityID":430700, "AreaSort":430700},
+{"AreaID":430621, "name":"岳阳县", "CityID":430600, "AreaSort":430600},
+{"AreaID":430624, "name":"湘阴县", "CityID":430600, "AreaSort":430600},
+{"AreaID":430623, "name":"华容县", "CityID":430600, "AreaSort":430600},
+{"AreaID":430682, "name":"临湘市", "CityID":430600, "AreaSort":430600},
+{"AreaID":430611, "name":"君山区", "CityID":430600, "AreaSort":430600},
+{"AreaID":430602, "name":"岳阳楼区", "CityID":430600, "AreaSort":430600},
+{"AreaID":430681, "name":"汨罗市", "CityID":430600, "AreaSort":430600},
+{"AreaID":430603, "name":"云溪区", "CityID":430600, "AreaSort":430600},
+{"AreaID":430626, "name":"平江县", "CityID":430600, "AreaSort":430600},
+{"AreaID":430903, "name":"赫山区", "CityID":430900, "AreaSort":430900},
+{"AreaID":430902, "name":"资阳区", "CityID":430900, "AreaSort":430900},
+{"AreaID":430921, "name":"南县", "CityID":430900, "AreaSort":430900},
+{"AreaID":430922, "name":"桃江县", "CityID":430900, "AreaSort":430900},
+{"AreaID":430923, "name":"安化县", "CityID":430900, "AreaSort":430900},
+{"AreaID":430981, "name":"沅江市", "CityID":430900, "AreaSort":430900},
+{"AreaID":431381, "name":"冷水江市", "CityID":431300, "AreaSort":431300},
+{"AreaID":431382, "name":"涟源市", "CityID":431300, "AreaSort":431300},
+{"AreaID":431302, "name":"娄星区", "CityID":431300, "AreaSort":431300},
+{"AreaID":431322, "name":"新化县", "CityID":431300, "AreaSort":431300},
+{"AreaID":431321, "name":"双峰县", "CityID":431300, "AreaSort":431300},
+{"AreaID":430408, "name":"蒸湘区", "CityID":430400, "AreaSort":430400},
+{"AreaID":430407, "name":"石鼓区", "CityID":430400, "AreaSort":430400},
+{"AreaID":430406, "name":"雁峰区", "CityID":430400, "AreaSort":430400},
+{"AreaID":430405, "name":"珠晖区", "CityID":430400, "AreaSort":430400},
+{"AreaID":430422, "name":"衡南县", "CityID":430400, "AreaSort":430400},
+{"AreaID":430421, "name":"衡阳县", "CityID":430400, "AreaSort":430400},
+{"AreaID":430412, "name":"南岳区", "CityID":430400, "AreaSort":430400},
+{"AreaID":430482, "name":"常宁市", "CityID":430400, "AreaSort":430400},
+{"AreaID":430426, "name":"祁东县", "CityID":430400, "AreaSort":430400},
+{"AreaID":430481, "name":"耒阳市", "CityID":430400, "AreaSort":430400},
+{"AreaID":430424, "name":"衡东县", "CityID":430400, "AreaSort":430400},
+{"AreaID":430423, "name":"衡山县", "CityID":430400, "AreaSort":430400},
+{"AreaID":430124, "name":"宁乡县", "CityID":430100, "AreaSort":430100},
+{"AreaID":430181, "name":"浏阳市", "CityID":430100, "AreaSort":430100},
+{"AreaID":430121, "name":"长沙县", "CityID":430100, "AreaSort":430100},
+{"AreaID":430105, "name":"开福区", "CityID":430100, "AreaSort":430100},
+{"AreaID":430104, "name":"岳麓区", "CityID":430100, "AreaSort":430100},
+{"AreaID":430112, "name":"望城区", "CityID":430100, "AreaSort":430100},
+{"AreaID":430103, "name":"天心区", "CityID":430100, "AreaSort":430100},
+{"AreaID":430111, "name":"雨花区", "CityID":430100, "AreaSort":430100},
+{"AreaID":430102, "name":"芙蓉区", "CityID":430100, "AreaSort":430100},
+{"AreaID":441502, "name":"城区", "CityID":441500, "AreaSort":441500},
+{"AreaID":441521, "name":"海丰县", "CityID":441500, "AreaSort":441500},
+{"AreaID":441523, "name":"陆河县", "CityID":441500, "AreaSort":441500},
+{"AreaID":441581, "name":"陆丰市", "CityID":441500, "AreaSort":441500},
+{"AreaID":440303, "name":"罗湖区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440304, "name":"福田区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440307, "name":"龙岗区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440308, "name":"盐田区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440305, "name":"南山区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440306, "name":"宝安区", "CityID":440300, "AreaSort":440300},
+{"AreaID":440606, "name":"顺德区", "CityID":440600, "AreaSort":440600},
+{"AreaID":440607, "name":"三水区", "CityID":440600, "AreaSort":440600},
+{"AreaID":440608, "name":"高明区", "CityID":440600, "AreaSort":440600},
+{"AreaID":440604, "name":"禅城区", "CityID":440600, "AreaSort":440600},
+{"AreaID":440605, "name":"南海区", "CityID":440600, "AreaSort":440600},
+{"AreaID":440902, "name":"茂南区", "CityID":440900, "AreaSort":440900},
+{"AreaID":440904, "name":"电白区", "CityID":440900, "AreaSort":440900},
+{"AreaID":440982, "name":"化州市", "CityID":440900, "AreaSort":440900},
+{"AreaID":440981, "name":"高州市", "CityID":440900, "AreaSort":440900},
+{"AreaID":440983, "name":"信宜市", "CityID":440900, "AreaSort":440900},
+{"AreaID":441625, "name":"东源县", "CityID":441600, "AreaSort":441600},
+{"AreaID":441602, "name":"源城区", "CityID":441600, "AreaSort":441600},
+{"AreaID":441621, "name":"紫金县", "CityID":441600, "AreaSort":441600},
+{"AreaID":441622, "name":"龙川县", "CityID":441600, "AreaSort":441600},
+{"AreaID":441623, "name":"连平县", "CityID":441600, "AreaSort":441600},
+{"AreaID":441624, "name":"和平县", "CityID":441600, "AreaSort":441600},
+{"AreaID":440825, "name":"徐闻县", "CityID":440800, "AreaSort":440800},
+{"AreaID":440804, "name":"坡头区", "CityID":440800, "AreaSort":440800},
+{"AreaID":440823, "name":"遂溪县", "CityID":440800, "AreaSort":440800},
+{"AreaID":440811, "name":"麻章区", "CityID":440800, "AreaSort":440800},
+{"AreaID":440802, "name":"赤坎区", "CityID":440800, "AreaSort":440800},
+{"AreaID":440803, "name":"霞山区", "CityID":440800, "AreaSort":440800},
+{"AreaID":440881, "name":"廉江市", "CityID":440800, "AreaSort":440800},
+{"AreaID":440882, "name":"雷州市", "CityID":440800, "AreaSort":440800},
+{"AreaID":440883, "name":"吴川市", "CityID":440800, "AreaSort":440800},
+{"AreaID":441324, "name":"龙门县", "CityID":441300, "AreaSort":441300},
+{"AreaID":441323, "name":"惠东县", "CityID":441300, "AreaSort":441300},
+{"AreaID":441322, "name":"博罗县", "CityID":441300, "AreaSort":441300},
+{"AreaID":441303, "name":"惠阳区", "CityID":441300, "AreaSort":441300},
+{"AreaID":441302, "name":"惠城区", "CityID":441300, "AreaSort":441300},
+{"AreaID":445203, "name":"揭东区", "CityID":445200, "AreaSort":445200},
+{"AreaID":445224, "name":"惠来县", "CityID":445200, "AreaSort":445200},
+{"AreaID":445202, "name":"榕城区", "CityID":445200, "AreaSort":445200},
+{"AreaID":445222, "name":"揭西县", "CityID":445200, "AreaSort":445200},
+{"AreaID":445281, "name":"普宁市", "CityID":445200, "AreaSort":445200},
+{"AreaID":440118, "name":"增城区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440117, "name":"从化区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440104, "name":"越秀区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440103, "name":"荔湾区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440115, "name":"南沙区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440106, "name":"天河区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440114, "name":"花都区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440105, "name":"海珠区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440113, "name":"番禺区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440112, "name":"黄埔区", "CityID":440100, "AreaSort":440100},
+{"AreaID":440111, "name":"白云区", "CityID":440100, "AreaSort":440100},
+{"AreaID":441821, "name":"佛冈县", "CityID":441800, "AreaSort":441800},
+{"AreaID":441802, "name":"清城区", "CityID":441800, "AreaSort":441800},
+{"AreaID":441803, "name":"清新区", "CityID":441800, "AreaSort":441800},
+{"AreaID":441882, "name":"连州市", "CityID":441800, "AreaSort":441800},
+{"AreaID":441881, "name":"英德市", "CityID":441800, "AreaSort":441800},
+{"AreaID":441825, "name":"连山壮族瑶族自治县", "CityID":441800, "AreaSort":441800},
+{"AreaID":441826, "name":"连南瑶族自治县", "CityID":441800, "AreaSort":441800},
+{"AreaID":441823, "name":"阳山县", "CityID":441800, "AreaSort":441800},
+{"AreaID":445102, "name":"湘桥区", "CityID":445100, "AreaSort":445100},
+{"AreaID":445103, "name":"潮安区", "CityID":445100, "AreaSort":445100},
+{"AreaID":445122, "name":"饶平县", "CityID":445100, "AreaSort":445100},
+{"AreaID":440224, "name":"仁化县", "CityID":440200, "AreaSort":440200},
+{"AreaID":440282, "name":"南雄市", "CityID":440200, "AreaSort":440200},
+{"AreaID":440281, "name":"乐昌市", "CityID":440200, "AreaSort":440200},
+{"AreaID":440203, "name":"武江区", "CityID":440200, "AreaSort":440200},
+{"AreaID":440233, "name":"新丰县", "CityID":440200, "AreaSort":440200},
+{"AreaID":440232, "name":"乳源瑶族自治县", "CityID":440200, "AreaSort":440200},
+{"AreaID":440205, "name":"曲江区", "CityID":440200, "AreaSort":440200},
+{"AreaID":440222, "name":"始兴县", "CityID":440200, "AreaSort":440200},
+{"AreaID":440204, "name":"浈江区", "CityID":440200, "AreaSort":440200},
+{"AreaID":440229, "name":"翁源县", "CityID":440200, "AreaSort":440200},
+{"AreaID":440781, "name":"台山市", "CityID":440700, "AreaSort":440700},
+{"AreaID":440784, "name":"鹤山市", "CityID":440700, "AreaSort":440700},
+{"AreaID":440783, "name":"开平市", "CityID":440700, "AreaSort":440700},
+{"AreaID":440785, "name":"恩平市", "CityID":440700, "AreaSort":440700},
+{"AreaID":440704, "name":"江海区", "CityID":440700, "AreaSort":440700},
+{"AreaID":440703, "name":"蓬江区", "CityID":440700, "AreaSort":440700},
+{"AreaID":440705, "name":"新会区", "CityID":440700, "AreaSort":440700},
+{"AreaID":442000, "name":"湖滨北路", "CityID":442000, "AreaSort":442000},
+{"AreaID":445381, "name":"罗定市", "CityID":445300, "AreaSort":445300},
+{"AreaID":445321, "name":"新兴县", "CityID":445300, "AreaSort":445300},
+{"AreaID":445322, "name":"郁南县", "CityID":445300, "AreaSort":445300},
+{"AreaID":445303, "name":"云安区", "CityID":445300, "AreaSort":445300},
+{"AreaID":445302, "name":"云城区", "CityID":445300, "AreaSort":445300},
+{"AreaID":441203, "name":"鼎湖区", "CityID":441200, "AreaSort":441200},
+{"AreaID":441204, "name":"高要区", "CityID":441200, "AreaSort":441200},
+{"AreaID":441202, "name":"端州区", "CityID":441200, "AreaSort":441200},
+{"AreaID":441224, "name":"怀集县", "CityID":441200, "AreaSort":441200},
+{"AreaID":441223, "name":"广宁县", "CityID":441200, "AreaSort":441200},
+{"AreaID":441284, "name":"四会市", "CityID":441200, "AreaSort":441200},
+{"AreaID":441226, "name":"德庆县", "CityID":441200, "AreaSort":441200},
+{"AreaID":441225, "name":"封开县", "CityID":441200, "AreaSort":441200},
+{"AreaID":441781, "name":"阳春市", "CityID":441700, "AreaSort":441700},
+{"AreaID":441704, "name":"阳东区", "CityID":441700, "AreaSort":441700},
+{"AreaID":441702, "name":"江城区", "CityID":441700, "AreaSort":441700},
+{"AreaID":441721, "name":"阳西县", "CityID":441700, "AreaSort":441700},
+{"AreaID":440404, "name":"金湾区", "CityID":440400, "AreaSort":440400},
+{"AreaID":440403, "name":"斗门区", "CityID":440400, "AreaSort":440400},
+{"AreaID":440402, "name":"香洲区", "CityID":440400, "AreaSort":440400},
+{"AreaID":441422, "name":"大埔县", "CityID":441400, "AreaSort":441400},
+{"AreaID":441481, "name":"兴宁市", "CityID":441400, "AreaSort":441400},
+{"AreaID":441426, "name":"平远县", "CityID":441400, "AreaSort":441400},
+{"AreaID":441424, "name":"五华县", "CityID":441400, "AreaSort":441400},
+{"AreaID":441423, "name":"丰顺县", "CityID":441400, "AreaSort":441400},
+{"AreaID":441427, "name":"蕉岭县", "CityID":441400, "AreaSort":441400},
+{"AreaID":441402, "name":"梅江区", "CityID":441400, "AreaSort":441400},
+{"AreaID":441403, "name":"梅县区", "CityID":441400, "AreaSort":441400},
+{"AreaID":441900, "name":"三元里", "CityID":441900, "AreaSort":441900},
+{"AreaID":440514, "name":"潮南区", "CityID":440500, "AreaSort":440500},
+{"AreaID":440523, "name":"南澳县", "CityID":440500, "AreaSort":440500},
+{"AreaID":440515, "name":"澄海区", "CityID":440500, "AreaSort":440500},
+{"AreaID":440507, "name":"龙湖区", "CityID":440500, "AreaSort":440500},
+{"AreaID":440512, "name":"濠江区", "CityID":440500, "AreaSort":440500},
+{"AreaID":440513, "name":"潮阳区", "CityID":440500, "AreaSort":440500},
+{"AreaID":440511, "name":"金平区", "CityID":440500, "AreaSort":440500},
+{"AreaID":450802, "name":"港北区", "CityID":450800, "AreaSort":450800},
+{"AreaID":450804, "name":"覃塘区", "CityID":450800, "AreaSort":450800},
+{"AreaID":450821, "name":"平南县", "CityID":450800, "AreaSort":450800},
+{"AreaID":450803, "name":"港南区", "CityID":450800, "AreaSort":450800},
+{"AreaID":450881, "name":"桂平市", "CityID":450800, "AreaSort":450800},
+{"AreaID":450512, "name":"铁山港区", "CityID":450500, "AreaSort":450500},
+{"AreaID":450521, "name":"合浦县", "CityID":450500, "AreaSort":450500},
+{"AreaID":450503, "name":"银海区", "CityID":450500, "AreaSort":450500},
+{"AreaID":450502, "name":"海城区", "CityID":450500, "AreaSort":450500},
+{"AreaID":451031, "name":"隆林各族自治县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451002, "name":"右江区", "CityID":451000, "AreaSort":451000},
+{"AreaID":451030, "name":"西林县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451021, "name":"田阳县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451024, "name":"德保县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451023, "name":"平果县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451022, "name":"田东县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451029, "name":"田林县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451028, "name":"乐业县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451081, "name":"靖西市", "CityID":451000, "AreaSort":451000},
+{"AreaID":451027, "name":"凌云县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451026, "name":"那坡县", "CityID":451000, "AreaSort":451000},
+{"AreaID":451221, "name":"南丹县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451223, "name":"凤山县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451222, "name":"天峨县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451281, "name":"宜州市", "CityID":451200, "AreaSort":451200},
+{"AreaID":451225, "name":"罗城仫佬族自治县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451224, "name":"东兰县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451227, "name":"巴马瑶族自治县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451226, "name":"环江毛南族自治县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451229, "name":"大化瑶族自治县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451228, "name":"都安瑶族自治县", "CityID":451200, "AreaSort":451200},
+{"AreaID":451202, "name":"金城江区", "CityID":451200, "AreaSort":451200},
+{"AreaID":450304, "name":"象山区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450323, "name":"灵川县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450305, "name":"七星区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450325, "name":"兴安县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450324, "name":"全州县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450332, "name":"恭城瑶族自治县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450331, "name":"荔浦县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450330, "name":"平乐县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450321, "name":"阳朔县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450327, "name":"灌阳县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450326, "name":"永福县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450329, "name":"资源县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450302, "name":"秀峰区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450311, "name":"雁山区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450328, "name":"龙胜各族自治县", "CityID":450300, "AreaSort":450300},
+{"AreaID":450303, "name":"叠彩区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450312, "name":"临桂区", "CityID":450300, "AreaSort":450300},
+{"AreaID":450205, "name":"柳北区", "CityID":450200, "AreaSort":450200},
+{"AreaID":450202, "name":"城中区", "CityID":450200, "AreaSort":450200},
+{"AreaID":450222, "name":"柳城县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450204, "name":"柳南区", "CityID":450200, "AreaSort":450200},
+{"AreaID":450221, "name":"柳江县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450203, "name":"鱼峰区", "CityID":450200, "AreaSort":450200},
+{"AreaID":450224, "name":"融安县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450223, "name":"鹿寨县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450226, "name":"三江侗族自治县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450225, "name":"融水苗族自治县", "CityID":450200, "AreaSort":450200},
+{"AreaID":450481, "name":"岑溪市", "CityID":450400, "AreaSort":450400},
+{"AreaID":450421, "name":"苍梧县", "CityID":450400, "AreaSort":450400},
+{"AreaID":450422, "name":"藤县", "CityID":450400, "AreaSort":450400},
+{"AreaID":450423, "name":"蒙山县", "CityID":450400, "AreaSort":450400},
+{"AreaID":450403, "name":"万秀区", "CityID":450400, "AreaSort":450400},
+{"AreaID":450405, "name":"长洲区", "CityID":450400, "AreaSort":450400},
+{"AreaID":450406, "name":"龙圩区", "CityID":450400, "AreaSort":450400},
+{"AreaID":450110, "name":"武鸣区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450102, "name":"兴宁区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450103, "name":"青秀区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450105, "name":"江南区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450123, "name":"隆安县", "CityID":450100, "AreaSort":450100},
+{"AreaID":450107, "name":"西乡塘区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450108, "name":"良庆区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450109, "name":"邕宁区", "CityID":450100, "AreaSort":450100},
+{"AreaID":450127, "name":"横县", "CityID":450100, "AreaSort":450100},
+{"AreaID":450126, "name":"宾阳县", "CityID":450100, "AreaSort":450100},
+{"AreaID":450125, "name":"上林县", "CityID":450100, "AreaSort":450100},
+{"AreaID":450124, "name":"马山县", "CityID":450100, "AreaSort":450100},
+{"AreaID":451321, "name":"忻城县", "CityID":451300, "AreaSort":451300},
+{"AreaID":451322, "name":"象州县", "CityID":451300, "AreaSort":451300},
+{"AreaID":451302, "name":"兴宾区", "CityID":451300, "AreaSort":451300},
+{"AreaID":451323, "name":"武宣县", "CityID":451300, "AreaSort":451300},
+{"AreaID":451324, "name":"金秀瑶族自治县", "CityID":451300, "AreaSort":451300},
+{"AreaID":451381, "name":"合山市", "CityID":451300, "AreaSort":451300},
+{"AreaID":451402, "name":"江州区", "CityID":451400, "AreaSort":451400},
+{"AreaID":451424, "name":"大新县", "CityID":451400, "AreaSort":451400},
+{"AreaID":451425, "name":"天等县", "CityID":451400, "AreaSort":451400},
+{"AreaID":451422, "name":"宁明县", "CityID":451400, "AreaSort":451400},
+{"AreaID":451481, "name":"凭祥市", "CityID":451400, "AreaSort":451400},
+{"AreaID":451423, "name":"龙州县", "CityID":451400, "AreaSort":451400},
+{"AreaID":451421, "name":"扶绥县", "CityID":451400, "AreaSort":451400},
+{"AreaID":450681, "name":"东兴市", "CityID":450600, "AreaSort":450600},
+{"AreaID":450621, "name":"上思县", "CityID":450600, "AreaSort":450600},
+{"AreaID":450602, "name":"港口区", "CityID":450600, "AreaSort":450600},
+{"AreaID":450603, "name":"防城区", "CityID":450600, "AreaSort":450600},
+{"AreaID":450921, "name":"容县", "CityID":450900, "AreaSort":450900},
+{"AreaID":450923, "name":"博白县", "CityID":450900, "AreaSort":450900},
+{"AreaID":450922, "name":"陆川县", "CityID":450900, "AreaSort":450900},
+{"AreaID":450924, "name":"兴业县", "CityID":450900, "AreaSort":450900},
+{"AreaID":450902, "name":"玉州区", "CityID":450900, "AreaSort":450900},
+{"AreaID":450981, "name":"北流市", "CityID":450900, "AreaSort":450900},
+{"AreaID":450903, "name":"福绵区", "CityID":450900, "AreaSort":450900},
+{"AreaID":451102, "name":"八步区", "CityID":451100, "AreaSort":451100},
+{"AreaID":451122, "name":"钟山县", "CityID":451100, "AreaSort":451100},
+{"AreaID":451121, "name":"昭平县", "CityID":451100, "AreaSort":451100},
+{"AreaID":451123, "name":"富川瑶族自治县", "CityID":451100, "AreaSort":451100},
+{"AreaID":450722, "name":"浦北县", "CityID":450700, "AreaSort":450700},
+{"AreaID":450703, "name":"钦北区", "CityID":450700, "AreaSort":450700},
+{"AreaID":450721, "name":"灵山县", "CityID":450700, "AreaSort":450700},
+{"AreaID":450702, "name":"钦南区", "CityID":450700, "AreaSort":450700},
+{"AreaID":460200, "name":"三亚湾", "CityID":460200, "AreaSort":460200},
+{"AreaID":460202, "name":"海棠区", "CityID":460200, "AreaSort":460200},
+{"AreaID":460203, "name":"吉阳区", "CityID":460200, "AreaSort":460200},
+{"AreaID":460204, "name":"天涯区", "CityID":460200, "AreaSort":460200},
+{"AreaID":460205, "name":"崖州区", "CityID":460200, "AreaSort":460200},
+{"AreaID":460321, "name":"西沙群岛", "CityID":460300, "AreaSort":460300},
+{"AreaID":460322, "name":"南沙群岛", "CityID":460300, "AreaSort":460300},
+{"AreaID":460323, "name":"中沙群岛的岛礁及其海域", "CityID":460300, "AreaSort":460300},
+{"AreaID":460105, "name":"秀英区", "CityID":460100, "AreaSort":460100},
+{"AreaID":460106, "name":"龙华区", "CityID":460100, "AreaSort":460100},
+{"AreaID":460107, "name":"琼山区", "CityID":460100, "AreaSort":460100},
+{"AreaID":460108, "name":"美兰区", "CityID":460100, "AreaSort":460100},
+{"AreaID":500119, "name":"南川区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500103, "name":"渝中区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500116, "name":"江津区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500102, "name":"涪陵区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500115, "name":"长寿区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500101, "name":"万州区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500118, "name":"永川区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500117, "name":"合川区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500237, "name":"巫山县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500236, "name":"奉节县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500238, "name":"巫溪县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500243, "name":"彭水苗族土家族自治县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500240, "name":"石柱土家族自治县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500241, "name":"秀山土家族苗族自治县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500242, "name":"酉阳土家族苗族自治县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500120, "name":"璧山区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500110, "name":"綦江区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500112, "name":"渝北区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500111, "name":"大足区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500114, "name":"黔江区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500113, "name":"巴南区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500231, "name":"垫江县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500230, "name":"丰都县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500233, "name":"忠县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500232, "name":"武隆县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500235, "name":"云阳县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500234, "name":"开县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500228, "name":"梁平县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500229, "name":"城口县", "CityID":500100, "AreaSort":500000},
+{"AreaID":500104, "name":"大渡口区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500153, "name":"荣昌区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500105, "name":"江北区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500106, "name":"沙坪坝区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500151, "name":"铜梁区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500107, "name":"九龙坡区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500152, "name":"潼南区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500108, "name":"南岸区", "CityID":500100, "AreaSort":500000},
+{"AreaID":500109, "name":"北碚区", "CityID":500100, "AreaSort":500000},
+{"AreaID":512002, "name":"雁江区", "CityID":512000, "AreaSort":512000},
+{"AreaID":512022, "name":"乐至县", "CityID":512000, "AreaSort":512000},
+{"AreaID":512081, "name":"简阳市", "CityID":512000, "AreaSort":512000},
+{"AreaID":512021, "name":"安岳县", "CityID":512000, "AreaSort":512000},
+{"AreaID":511902, "name":"巴州区", "CityID":511900, "AreaSort":511900},
+{"AreaID":511903, "name":"恩阳区", "CityID":511900, "AreaSort":511900},
+{"AreaID":511921, "name":"通江县", "CityID":511900, "AreaSort":511900},
+{"AreaID":511923, "name":"平昌县", "CityID":511900, "AreaSort":511900},
+{"AreaID":511922, "name":"南江县", "CityID":511900, "AreaSort":511900},
+{"AreaID":511824, "name":"石棉县", "CityID":511800, "AreaSort":511800},
+{"AreaID":511823, "name":"汉源县", "CityID":511800, "AreaSort":511800},
+{"AreaID":511826, "name":"芦山县", "CityID":511800, "AreaSort":511800},
+{"AreaID":511825, "name":"天全县", "CityID":511800, "AreaSort":511800},
+{"AreaID":511802, "name":"雨城区", "CityID":511800, "AreaSort":511800},
+{"AreaID":511822, "name":"荥经县", "CityID":511800, "AreaSort":511800},
+{"AreaID":511803, "name":"名山区", "CityID":511800, "AreaSort":511800},
+{"AreaID":511827, "name":"宝兴县", "CityID":511800, "AreaSort":511800},
+{"AreaID":510683, "name":"绵竹市", "CityID":510600, "AreaSort":510600},
+{"AreaID":510682, "name":"什邡市", "CityID":510600, "AreaSort":510600},
+{"AreaID":510626, "name":"罗江县", "CityID":510600, "AreaSort":510600},
+{"AreaID":510603, "name":"旌阳区", "CityID":510600, "AreaSort":510600},
+{"AreaID":510681, "name":"广汉市", "CityID":510600, "AreaSort":510600},
+{"AreaID":510623, "name":"中江县", "CityID":510600, "AreaSort":510600},
+{"AreaID":513338, "name":"得荣县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513329, "name":"新龙县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513337, "name":"稻城县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513328, "name":"甘孜县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513327, "name":"炉霍县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513326, "name":"道孚县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513301, "name":"康定市", "CityID":513300, "AreaSort":513300},
+{"AreaID":513322, "name":"泸定县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513331, "name":"白玉县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513323, "name":"丹巴县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513332, "name":"石渠县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513324, "name":"九龙县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513325, "name":"雅江县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513330, "name":"德格县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513335, "name":"巴塘县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513336, "name":"乡城县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513333, "name":"色达县", "CityID":513300, "AreaSort":513300},
+{"AreaID":513334, "name":"理塘县", "CityID":513300, "AreaSort":513300},
+{"AreaID":511381, "name":"阆中市", "CityID":511300, "AreaSort":511300},
+{"AreaID":511304, "name":"嘉陵区", "CityID":511300, "AreaSort":511300},
+{"AreaID":511302, "name":"顺庆区", "CityID":511300, "AreaSort":511300},
+{"AreaID":511303, "name":"高坪区", "CityID":511300, "AreaSort":511300},
+{"AreaID":511321, "name":"南部县", "CityID":511300, "AreaSort":511300},
+{"AreaID":511325, "name":"西充县", "CityID":511300, "AreaSort":511300},
+{"AreaID":511323, "name":"蓬安县", "CityID":511300, "AreaSort":511300},
+{"AreaID":511324, "name":"仪陇县", "CityID":511300, "AreaSort":511300},
+{"AreaID":511322, "name":"营山县", "CityID":511300, "AreaSort":511300},
+{"AreaID":510121, "name":"金堂县", "CityID":510100, "AreaSort":510100},
+{"AreaID":510124, "name":"郫县", "CityID":510100, "AreaSort":510100},
+{"AreaID":510132, "name":"新津县", "CityID":510100, "AreaSort":510100},
+{"AreaID":510131, "name":"蒲江县", "CityID":510100, "AreaSort":510100},
+{"AreaID":510112, "name":"龙泉驿区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510113, "name":"青白江区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510106, "name":"金牛区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510105, "name":"青羊区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510104, "name":"锦江区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510181, "name":"都江堰市", "CityID":510100, "AreaSort":510100},
+{"AreaID":510182, "name":"彭州市", "CityID":510100, "AreaSort":510100},
+{"AreaID":510108, "name":"成华区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510107, "name":"武侯区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510183, "name":"邛崃市", "CityID":510100, "AreaSort":510100},
+{"AreaID":510129, "name":"大邑县", "CityID":510100, "AreaSort":510100},
+{"AreaID":510184, "name":"崇州市", "CityID":510100, "AreaSort":510100},
+{"AreaID":510114, "name":"新都区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510115, "name":"温江区", "CityID":510100, "AreaSort":510100},
+{"AreaID":510116, "name":"双流区", "CityID":510100, "AreaSort":510100},
+{"AreaID":511722, "name":"宣汉县", "CityID":511700, "AreaSort":511700},
+{"AreaID":511723, "name":"开江县", "CityID":511700, "AreaSort":511700},
+{"AreaID":511724, "name":"大竹县", "CityID":511700, "AreaSort":511700},
+{"AreaID":511725, "name":"渠县", "CityID":511700, "AreaSort":511700},
+{"AreaID":511703, "name":"达川区", "CityID":511700, "AreaSort":511700},
+{"AreaID":511702, "name":"通川区", "CityID":511700, "AreaSort":511700},
+{"AreaID":511781, "name":"万源市", "CityID":511700, "AreaSort":511700},
+{"AreaID":511421, "name":"仁寿县", "CityID":511400, "AreaSort":511400},
+{"AreaID":511425, "name":"青神县", "CityID":511400, "AreaSort":511400},
+{"AreaID":511423, "name":"洪雅县", "CityID":511400, "AreaSort":511400},
+{"AreaID":511424, "name":"丹棱县", "CityID":511400, "AreaSort":511400},
+{"AreaID":511403, "name":"彭山区", "CityID":511400, "AreaSort":511400},
+{"AreaID":511402, "name":"东坡区", "CityID":511400, "AreaSort":511400},
+{"AreaID":510821, "name":"旺苍县", "CityID":510800, "AreaSort":510800},
+{"AreaID":510802, "name":"利州区", "CityID":510800, "AreaSort":510800},
+{"AreaID":510812, "name":"朝天区", "CityID":510800, "AreaSort":510800},
+{"AreaID":510824, "name":"苍溪县", "CityID":510800, "AreaSort":510800},
+{"AreaID":510811, "name":"昭化区", "CityID":510800, "AreaSort":510800},
+{"AreaID":510823, "name":"剑阁县", "CityID":510800, "AreaSort":510800},
+{"AreaID":510822, "name":"青川县", "CityID":510800, "AreaSort":510800},
+{"AreaID":511102, "name":"市中区", "CityID":511100, "AreaSort":511100},
+{"AreaID":511129, "name":"沐川县", "CityID":511100, "AreaSort":511100},
+{"AreaID":511112, "name":"五通桥区", "CityID":511100, "AreaSort":511100},
+{"AreaID":511124, "name":"井研县", "CityID":511100, "AreaSort":511100},
+{"AreaID":511111, "name":"沙湾区", "CityID":511100, "AreaSort":511100},
+{"AreaID":511123, "name":"犍为县", "CityID":511100, "AreaSort":511100},
+{"AreaID":511126, "name":"夹江县", "CityID":511100, "AreaSort":511100},
+{"AreaID":511113, "name":"金口河区", "CityID":511100, "AreaSort":511100},
+{"AreaID":511181, "name":"峨眉山市", "CityID":511100, "AreaSort":511100},
+{"AreaID":511133, "name":"马边彝族自治县", "CityID":511100, "AreaSort":511100},
+{"AreaID":511132, "name":"峨边彝族自治县", "CityID":511100, "AreaSort":511100},
+{"AreaID":510727, "name":"平武县", "CityID":510700, "AreaSort":510700},
+{"AreaID":510704, "name":"游仙区", "CityID":510700, "AreaSort":510700},
+{"AreaID":510703, "name":"涪城区", "CityID":510700, "AreaSort":510700},
+{"AreaID":510781, "name":"江油市", "CityID":510700, "AreaSort":510700},
+{"AreaID":510722, "name":"三台县", "CityID":510700, "AreaSort":510700},
+{"AreaID":510723, "name":"盐亭县", "CityID":510700, "AreaSort":510700},
+{"AreaID":510724, "name":"安县", "CityID":510700, "AreaSort":510700},
+{"AreaID":510725, "name":"梓潼县", "CityID":510700, "AreaSort":510700},
+{"AreaID":510726, "name":"北川羌族自治县", "CityID":510700, "AreaSort":510700},
+{"AreaID":511528, "name":"兴文县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511529, "name":"屏山县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511526, "name":"珙县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511527, "name":"筠连县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511524, "name":"长宁县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511525, "name":"高县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511503, "name":"南溪区", "CityID":511500, "AreaSort":511500},
+{"AreaID":511523, "name":"江安县", "CityID":511500, "AreaSort":511500},
+{"AreaID":511502, "name":"翠屏区", "CityID":511500, "AreaSort":511500},
+{"AreaID":511521, "name":"宜宾县", "CityID":511500, "AreaSort":511500},
+{"AreaID":513201, "name":"马尔康市", "CityID":513200, "AreaSort":513200},
+{"AreaID":513221, "name":"汶川县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513222, "name":"理县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513223, "name":"茂县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513224, "name":"松潘县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513227, "name":"小金县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513225, "name":"九寨沟县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513228, "name":"黑水县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513226, "name":"金川县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513233, "name":"红原县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513232, "name":"若尔盖县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513231, "name":"阿坝县", "CityID":513200, "AreaSort":513200},
+{"AreaID":513230, "name":"壤塘县", "CityID":513200, "AreaSort":513200},
+{"AreaID":510923, "name":"大英县", "CityID":510900, "AreaSort":510900},
+{"AreaID":510922, "name":"射洪县", "CityID":510900, "AreaSort":510900},
+{"AreaID":510903, "name":"船山区", "CityID":510900, "AreaSort":510900},
+{"AreaID":510921, "name":"蓬溪县", "CityID":510900, "AreaSort":510900},
+{"AreaID":510904, "name":"安居区", "CityID":510900, "AreaSort":510900},
+{"AreaID":511681, "name":"华蓥市", "CityID":511600, "AreaSort":511600},
+{"AreaID":511602, "name":"广安区", "CityID":511600, "AreaSort":511600},
+{"AreaID":511622, "name":"武胜县", "CityID":511600, "AreaSort":511600},
+{"AreaID":511621, "name":"岳池县", "CityID":511600, "AreaSort":511600},
+{"AreaID":511603, "name":"前锋区", "CityID":511600, "AreaSort":511600},
+{"AreaID":511623, "name":"邻水县", "CityID":511600, "AreaSort":511600},
+{"AreaID":510302, "name":"自流井区", "CityID":510300, "AreaSort":510300},
+{"AreaID":510303, "name":"贡井区", "CityID":510300, "AreaSort":510300},
+{"AreaID":510304, "name":"大安区", "CityID":510300, "AreaSort":510300},
+{"AreaID":510322, "name":"富顺县", "CityID":510300, "AreaSort":510300},
+{"AreaID":510311, "name":"沿滩区", "CityID":510300, "AreaSort":510300},
+{"AreaID":510321, "name":"荣县", "CityID":510300, "AreaSort":510300},
+{"AreaID":511024, "name":"威远县", "CityID":511000, "AreaSort":511000},
+{"AreaID":511025, "name":"资中县", "CityID":511000, "AreaSort":511000},
+{"AreaID":511011, "name":"东兴区", "CityID":511000, "AreaSort":511000},
+{"AreaID":511028, "name":"隆昌县", "CityID":511000, "AreaSort":511000},
+{"AreaID":511002, "name":"市中区", "CityID":511000, "AreaSort":511000},
+{"AreaID":510421, "name":"米易县", "CityID":510400, "AreaSort":510400},
+{"AreaID":510403, "name":"西区", "CityID":510400, "AreaSort":510400},
+{"AreaID":510402, "name":"东区", "CityID":510400, "AreaSort":510400},
+{"AreaID":510422, "name":"盐边县", "CityID":510400, "AreaSort":510400},
+{"AreaID":510411, "name":"仁和区", "CityID":510400, "AreaSort":510400},
+{"AreaID":513435, "name":"甘洛县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513434, "name":"越西县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513433, "name":"冕宁县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513432, "name":"喜德县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513431, "name":"昭觉县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513430, "name":"金阳县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513401, "name":"西昌市", "CityID":513400, "AreaSort":513400},
+{"AreaID":513429, "name":"布拖县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513436, "name":"美姑县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513423, "name":"盐源县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513427, "name":"宁南县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513437, "name":"雷波县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513424, "name":"德昌县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513428, "name":"普格县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513425, "name":"会理县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513422, "name":"木里藏族自治县", "CityID":513400, "AreaSort":513400},
+{"AreaID":513426, "name":"会东县", "CityID":513400, "AreaSort":513400},
+{"AreaID":510522, "name":"合江县", "CityID":510500, "AreaSort":510500},
+{"AreaID":510521, "name":"泸县", "CityID":510500, "AreaSort":510500},
+{"AreaID":510524, "name":"叙永县", "CityID":510500, "AreaSort":510500},
+{"AreaID":510525, "name":"古蔺县", "CityID":510500, "AreaSort":510500},
+{"AreaID":510503, "name":"纳溪区", "CityID":510500, "AreaSort":510500},
+{"AreaID":510504, "name":"龙马潭区", "CityID":510500, "AreaSort":510500},
+{"AreaID":510502, "name":"江阳区", "CityID":510500, "AreaSort":510500},
+{"AreaID":522725, "name":"瓮安县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522726, "name":"独山县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522727, "name":"平塘县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522701, "name":"都匀市", "CityID":522700, "AreaSort":522700},
+{"AreaID":522702, "name":"福泉市", "CityID":522700, "AreaSort":522700},
+{"AreaID":522722, "name":"荔波县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522723, "name":"贵定县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522732, "name":"三都水族自治县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522730, "name":"龙里县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522731, "name":"惠水县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522728, "name":"罗甸县", "CityID":522700, "AreaSort":522700},
+{"AreaID":522729, "name":"长顺县", "CityID":522700, "AreaSort":522700},
+{"AreaID":520502, "name":"七星关区", "CityID":520500, "AreaSort":520500},
+{"AreaID":520527, "name":"赫章县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520526, "name":"威宁彝族回族苗族自治县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520525, "name":"纳雍县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520524, "name":"织金县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520523, "name":"金沙县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520522, "name":"黔西县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520521, "name":"大方县", "CityID":520500, "AreaSort":520500},
+{"AreaID":520222, "name":"盘县", "CityID":520200, "AreaSort":520200},
+{"AreaID":520221, "name":"水城县", "CityID":520200, "AreaSort":520200},
+{"AreaID":520203, "name":"六枝特区", "CityID":520200, "AreaSort":520200},
+{"AreaID":520201, "name":"钟山区", "CityID":520200, "AreaSort":520200},
+{"AreaID":522301, "name":"兴义市", "CityID":522300, "AreaSort":522300},
+{"AreaID":522323, "name":"普安县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522322, "name":"兴仁县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522326, "name":"望谟县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522327, "name":"册亨县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522324, "name":"晴隆县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522325, "name":"贞丰县", "CityID":522300, "AreaSort":522300},
+{"AreaID":522328, "name":"安龙县", "CityID":522300, "AreaSort":522300},
+{"AreaID":520424, "name":"关岭布依族苗族自治县", "CityID":520400, "AreaSort":520400},
+{"AreaID":520423, "name":"镇宁布依族苗族自治县", "CityID":520400, "AreaSort":520400},
+{"AreaID":520422, "name":"普定县", "CityID":520400, "AreaSort":520400},
+{"AreaID":520403, "name":"平坝区", "CityID":520400, "AreaSort":520400},
+{"AreaID":520402, "name":"西秀区", "CityID":520400, "AreaSort":520400},
+{"AreaID":520425, "name":"紫云苗族布依族自治县", "CityID":520400, "AreaSort":520400},
+{"AreaID":520328, "name":"湄潭县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520329, "name":"余庆县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520326, "name":"务川仡佬族苗族自治县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520327, "name":"凤冈县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520324, "name":"正安县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520325, "name":"道真仡佬族苗族自治县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520322, "name":"桐梓县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520323, "name":"绥阳县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520303, "name":"汇川区", "CityID":520300, "AreaSort":520300},
+{"AreaID":520302, "name":"红花岗区", "CityID":520300, "AreaSort":520300},
+{"AreaID":520330, "name":"习水县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520321, "name":"遵义县", "CityID":520300, "AreaSort":520300},
+{"AreaID":520382, "name":"仁怀市", "CityID":520300, "AreaSort":520300},
+{"AreaID":520381, "name":"赤水市", "CityID":520300, "AreaSort":520300},
+{"AreaID":522622, "name":"黄平县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522624, "name":"三穗县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522636, "name":"丹寨县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522623, "name":"施秉县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522635, "name":"麻江县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522626, "name":"岑巩县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522634, "name":"雷山县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522625, "name":"镇远县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522633, "name":"从江县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522628, "name":"锦屏县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522627, "name":"天柱县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522632, "name":"榕江县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522629, "name":"剑河县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522601, "name":"凯里市", "CityID":522600, "AreaSort":522600},
+{"AreaID":522630, "name":"台江县", "CityID":522600, "AreaSort":522600},
+{"AreaID":522631, "name":"黎平县", "CityID":522600, "AreaSort":522600},
+{"AreaID":520628, "name":"松桃苗族自治县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520627, "name":"沿河土家族自治县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520602, "name":"碧江区", "CityID":520600, "AreaSort":520600},
+{"AreaID":520622, "name":"玉屏侗族自治县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520621, "name":"江口县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520603, "name":"万山区", "CityID":520600, "AreaSort":520600},
+{"AreaID":520624, "name":"思南县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520623, "name":"石阡县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520626, "name":"德江县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520625, "name":"印江土家族苗族自治县", "CityID":520600, "AreaSort":520600},
+{"AreaID":520115, "name":"观山湖区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520103, "name":"云岩区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520113, "name":"白云区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520102, "name":"南明区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520181, "name":"清镇市", "CityID":520100, "AreaSort":520100},
+{"AreaID":520122, "name":"息烽县", "CityID":520100, "AreaSort":520100},
+{"AreaID":520111, "name":"花溪区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520123, "name":"修文县", "CityID":520100, "AreaSort":520100},
+{"AreaID":520112, "name":"乌当区", "CityID":520100, "AreaSort":520100},
+{"AreaID":520121, "name":"开阳县", "CityID":520100, "AreaSort":520100},
+{"AreaID":530821, "name":"宁洱哈尼族彝族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530823, "name":"景东彝族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530822, "name":"墨江哈尼族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530825, "name":"镇沅彝族哈尼族拉祜族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530824, "name":"景谷傣族彝族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530827, "name":"孟连傣族拉祜族佤族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530826, "name":"江城哈尼族彝族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530829, "name":"西盟佤族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530828, "name":"澜沧拉祜族自治县", "CityID":530800, "AreaSort":530800},
+{"AreaID":530802, "name":"思茅区", "CityID":530800, "AreaSort":530800},
+{"AreaID":532501, "name":"个旧市", "CityID":532500, "AreaSort":532500},
+{"AreaID":532527, "name":"泸西县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532502, "name":"开远市", "CityID":532500, "AreaSort":532500},
+{"AreaID":532528, "name":"元阳县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532525, "name":"石屏县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532523, "name":"屏边苗族自治县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532524, "name":"建水县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532503, "name":"蒙自市", "CityID":532500, "AreaSort":532500},
+{"AreaID":532504, "name":"弥勒市", "CityID":532500, "AreaSort":532500},
+{"AreaID":532532, "name":"河口瑶族自治县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532529, "name":"红河县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532531, "name":"绿春县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532530, "name":"金平苗族瑶族傣族自治县", "CityID":532500, "AreaSort":532500},
+{"AreaID":532628, "name":"富宁县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532601, "name":"文山市", "CityID":532600, "AreaSort":532600},
+{"AreaID":532623, "name":"西畴县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532622, "name":"砚山县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532627, "name":"广南县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532626, "name":"丘北县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532625, "name":"马关县", "CityID":532600, "AreaSort":532600},
+{"AreaID":532624, "name":"麻栗坡县", "CityID":532600, "AreaSort":532600},
+{"AreaID":530927, "name":"沧源佤族自治县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530924, "name":"镇康县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530923, "name":"永德县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530926, "name":"耿马傣族佤族自治县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530925, "name":"双江拉祜族佤族布朗族傣族自治县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530902, "name":"临翔区", "CityID":530900, "AreaSort":530900},
+{"AreaID":530922, "name":"云县", "CityID":530900, "AreaSort":530900},
+{"AreaID":530921, "name":"凤庆县", "CityID":530900, "AreaSort":530900},
+{"AreaID":532331, "name":"禄丰县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532322, "name":"双柏县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532329, "name":"武定县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532328, "name":"元谋县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532327, "name":"永仁县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532301, "name":"楚雄市", "CityID":532300, "AreaSort":532300},
+{"AreaID":532326, "name":"大姚县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532325, "name":"姚安县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532324, "name":"南华县", "CityID":532300, "AreaSort":532300},
+{"AreaID":532323, "name":"牟定县", "CityID":532300, "AreaSort":532300},
+{"AreaID":530323, "name":"师宗县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530324, "name":"罗平县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530321, "name":"马龙县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530322, "name":"陆良县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530328, "name":"沾益县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530381, "name":"宣威市", "CityID":530300, "AreaSort":530300},
+{"AreaID":530325, "name":"富源县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530326, "name":"会泽县", "CityID":530300, "AreaSort":530300},
+{"AreaID":530302, "name":"麒麟区", "CityID":530300, "AreaSort":530300},
+{"AreaID":530630, "name":"水富县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530629, "name":"威信县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530628, "name":"彝良县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530627, "name":"镇雄县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530626, "name":"绥江县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530625, "name":"永善县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530624, "name":"大关县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530623, "name":"盐津县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530622, "name":"巧家县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530621, "name":"鲁甸县", "CityID":530600, "AreaSort":530600},
+{"AreaID":530602, "name":"昭阳区", "CityID":530600, "AreaSort":530600},
+{"AreaID":530426, "name":"峨山彝族自治县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530427, "name":"新平彝族傣族自治县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530424, "name":"华宁县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530425, "name":"易门县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530422, "name":"澄江县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530423, "name":"通海县", "CityID":530400, "AreaSort":530400},
+{"AreaID":530402, "name":"红塔区", "CityID":530400, "AreaSort":530400},
+{"AreaID":530403, "name":"江川区", "CityID":530400, "AreaSort":530400},
+{"AreaID":530428, "name":"元江哈尼族彝族傣族自治县", "CityID":530400, "AreaSort":530400},
+{"AreaID":533423, "name":"维西傈僳族自治县", "CityID":533400, "AreaSort":533400},
+{"AreaID":533422, "name":"德钦县", "CityID":533400, "AreaSort":533400},
+{"AreaID":533401, "name":"香格里拉市", "CityID":533400, "AreaSort":533400},
+{"AreaID":532922, "name":"漾濞彝族自治县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532924, "name":"宾川县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532923, "name":"祥云县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532901, "name":"大理市", "CityID":532900, "AreaSort":532900},
+{"AreaID":532930, "name":"洱源县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532931, "name":"剑川县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532929, "name":"云龙县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532926, "name":"南涧彝族自治县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532925, "name":"弥渡县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532932, "name":"鹤庆县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532928, "name":"永平县", "CityID":532900, "AreaSort":532900},
+{"AreaID":532927, "name":"巍山彝族回族自治县", "CityID":532900, "AreaSort":532900},
+{"AreaID":530502, "name":"隆阳区", "CityID":530500, "AreaSort":530500},
+{"AreaID":530521, "name":"施甸县", "CityID":530500, "AreaSort":530500},
+{"AreaID":530581, "name":"腾冲市", "CityID":530500, "AreaSort":530500},
+{"AreaID":530523, "name":"龙陵县", "CityID":530500, "AreaSort":530500},
+{"AreaID":530524, "name":"昌宁县", "CityID":530500, "AreaSort":530500},
+{"AreaID":532822, "name":"勐海县", "CityID":532800, "AreaSort":532800},
+{"AreaID":532823, "name":"勐腊县", "CityID":532800, "AreaSort":532800},
+{"AreaID":532801, "name":"景洪市", "CityID":532800, "AreaSort":532800},
+{"AreaID":533124, "name":"陇川县", "CityID":533100, "AreaSort":533100},
+{"AreaID":533123, "name":"盈江县", "CityID":533100, "AreaSort":533100},
+{"AreaID":533122, "name":"梁河县", "CityID":533100, "AreaSort":533100},
+{"AreaID":533102, "name":"瑞丽市", "CityID":533100, "AreaSort":533100},
+{"AreaID":533103, "name":"芒市", "CityID":533100, "AreaSort":533100},
+{"AreaID":530181, "name":"安宁市", "CityID":530100, "AreaSort":530100},
+{"AreaID":530103, "name":"盘龙区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530122, "name":"晋宁县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530102, "name":"五华区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530126, "name":"石林彝族自治县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530113, "name":"东川区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530111, "name":"官渡区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530125, "name":"宜良县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530112, "name":"西山区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530124, "name":"富民县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530114, "name":"呈贡区", "CityID":530100, "AreaSort":530100},
+{"AreaID":530129, "name":"寻甸回族彝族自治县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530128, "name":"禄劝彝族苗族自治县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530127, "name":"嵩明县", "CityID":530100, "AreaSort":530100},
+{"AreaID":530724, "name":"宁蒗彝族自治县", "CityID":530700, "AreaSort":530700},
+{"AreaID":530723, "name":"华坪县", "CityID":530700, "AreaSort":530700},
+{"AreaID":530722, "name":"永胜县", "CityID":530700, "AreaSort":530700},
+{"AreaID":530721, "name":"玉龙纳西族自治县", "CityID":530700, "AreaSort":530700},
+{"AreaID":530702, "name":"古城区", "CityID":530700, "AreaSort":530700},
+{"AreaID":533325, "name":"兰坪白族普米族自治县", "CityID":533300, "AreaSort":533300},
+{"AreaID":533324, "name":"贡山独龙族怒族自治县", "CityID":533300, "AreaSort":533300},
+{"AreaID":533323, "name":"福贡县", "CityID":533300, "AreaSort":533300},
+{"AreaID":533321, "name":"泸水县", "CityID":533300, "AreaSort":533300},
+{"AreaID":542430, "name":"尼玛县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542431, "name":"双湖县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542429, "name":"巴青县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542428, "name":"班戈县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542427, "name":"索县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542426, "name":"申扎县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542425, "name":"安多县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542424, "name":"聂荣县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542423, "name":"比如县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542422, "name":"嘉黎县", "CityID":542400, "AreaSort":542400},
+{"AreaID":542421, "name":"那曲县", "CityID":542400, "AreaSort":542400},
+{"AreaID":540330, "name":"边坝县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540328, "name":"芒康县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540329, "name":"洛隆县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540302, "name":"卡若区", "CityID":540300, "AreaSort":540300},
+{"AreaID":540324, "name":"丁青县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540325, "name":"察雅县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540326, "name":"八宿县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540327, "name":"左贡县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540321, "name":"江达县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540322, "name":"贡觉县", "CityID":540300, "AreaSort":540300},
+{"AreaID":540323, "name":"类乌齐县", "CityID":540300, "AreaSort":540300},
+{"AreaID":542228, "name":"洛扎县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542227, "name":"措美县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542229, "name":"加查县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542224, "name":"桑日县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542223, "name":"贡嘎县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542226, "name":"曲松县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542225, "name":"琼结县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542221, "name":"乃东县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542231, "name":"隆子县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542222, "name":"扎囊县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542232, "name":"错那县", "CityID":542200, "AreaSort":542200},
+{"AreaID":542233, "name":"浪卡子县", "CityID":542200, "AreaSort":542200},
+{"AreaID":540221, "name":"南木林县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540222, "name":"江孜县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540223, "name":"定日县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540224, "name":"萨迦县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540225, "name":"拉孜县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540226, "name":"昂仁县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540227, "name":"谢通门县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540202, "name":"桑珠孜区", "CityID":540200, "AreaSort":540200},
+{"AreaID":540228, "name":"白朗县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540229, "name":"仁布县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540237, "name":"岗巴县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540236, "name":"萨嘎县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540233, "name":"亚东县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540232, "name":"仲巴县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540235, "name":"聂拉木县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540231, "name":"定结县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540234, "name":"吉隆县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540230, "name":"康马县", "CityID":540200, "AreaSort":540200},
+{"AreaID":540126, "name":"达孜县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540127, "name":"墨竹工卡县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540124, "name":"曲水县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540122, "name":"当雄县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540123, "name":"尼木县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540121, "name":"林周县", "CityID":540100, "AreaSort":540100},
+{"AreaID":540103, "name":"堆龙德庆区", "CityID":540100, "AreaSort":540100},
+{"AreaID":540102, "name":"城关区", "CityID":540100, "AreaSort":540100},
+{"AreaID":542521, "name":"普兰县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542522, "name":"札达县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542523, "name":"噶尔县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542524, "name":"日土县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542525, "name":"革吉县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542526, "name":"改则县", "CityID":542500, "AreaSort":542500},
+{"AreaID":542527, "name":"措勤县", "CityID":542500, "AreaSort":542500},
+{"AreaID":540402, "name":"巴宜区", "CityID":540400, "AreaSort":540400},
+{"AreaID":540422, "name":"米林县", "CityID":540400, "AreaSort":540400},
+{"AreaID":540421, "name":"工布江达县", "CityID":540400, "AreaSort":540400},
+{"AreaID":540424, "name":"波密县", "CityID":540400, "AreaSort":540400},
+{"AreaID":540423, "name":"墨脱县", "CityID":540400, "AreaSort":540400},
+{"AreaID":540426, "name":"朗县", "CityID":540400, "AreaSort":540400},
+{"AreaID":540425, "name":"察隅县", "CityID":540400, "AreaSort":540400},
+{"AreaID":610726, "name":"宁强县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610727, "name":"略阳县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610724, "name":"西乡县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610725, "name":"勉县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610722, "name":"城固县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610723, "name":"洋县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610702, "name":"汉台区", "CityID":610700, "AreaSort":610700},
+{"AreaID":610721, "name":"南郑县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610730, "name":"佛坪县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610728, "name":"镇巴县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610729, "name":"留坝县", "CityID":610700, "AreaSort":610700},
+{"AreaID":610422, "name":"三原县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610430, "name":"淳化县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610431, "name":"武功县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610428, "name":"长武县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610427, "name":"彬县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610429, "name":"旬邑县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610424, "name":"乾县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610481, "name":"兴平市", "CityID":610400, "AreaSort":610400},
+{"AreaID":610423, "name":"泾阳县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610426, "name":"永寿县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610425, "name":"礼泉县", "CityID":610400, "AreaSort":610400},
+{"AreaID":610402, "name":"秦都区", "CityID":610400, "AreaSort":610400},
+{"AreaID":610403, "name":"杨陵区", "CityID":610400, "AreaSort":610400},
+{"AreaID":610404, "name":"渭城区", "CityID":610400, "AreaSort":610400},
+{"AreaID":610829, "name":"吴堡县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610803, "name":"横山区", "CityID":610800, "AreaSort":610800},
+{"AreaID":610827, "name":"米脂县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610802, "name":"榆阳区", "CityID":610800, "AreaSort":610800},
+{"AreaID":610828, "name":"佳县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610830, "name":"清涧县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610821, "name":"神木县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610831, "name":"子洲县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610822, "name":"府谷县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610825, "name":"定边县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610826, "name":"绥德县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610824, "name":"靖边县", "CityID":610800, "AreaSort":610800},
+{"AreaID":610523, "name":"大荔县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610582, "name":"华阴市", "CityID":610500, "AreaSort":610500},
+{"AreaID":610522, "name":"潼关县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610581, "name":"韩城市", "CityID":610500, "AreaSort":610500},
+{"AreaID":610525, "name":"澄城县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610524, "name":"合阳县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610527, "name":"白水县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610526, "name":"蒲城县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610503, "name":"华州区", "CityID":610500, "AreaSort":610500},
+{"AreaID":610528, "name":"富平县", "CityID":610500, "AreaSort":610500},
+{"AreaID":610502, "name":"临渭区", "CityID":610500, "AreaSort":610500},
+{"AreaID":610114, "name":"阎良区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610113, "name":"雁塔区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610122, "name":"蓝田县", "CityID":610100, "AreaSort":610100},
+{"AreaID":610125, "name":"户县", "CityID":610100, "AreaSort":610100},
+{"AreaID":610112, "name":"未央区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610111, "name":"灞桥区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610124, "name":"周至县", "CityID":610100, "AreaSort":610100},
+{"AreaID":610102, "name":"新城区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610115, "name":"临潼区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610103, "name":"碑林区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610116, "name":"长安区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610104, "name":"莲湖区", "CityID":610100, "AreaSort":610100},
+{"AreaID":610117, "name":"高陵区", "CityID":610100, "AreaSort":610100},
+{"AreaID":611024, "name":"山阳县", "CityID":611000, "AreaSort":611000},
+{"AreaID":611025, "name":"镇安县", "CityID":611000, "AreaSort":611000},
+{"AreaID":611026, "name":"柞水县", "CityID":611000, "AreaSort":611000},
+{"AreaID":611002, "name":"商州区", "CityID":611000, "AreaSort":611000},
+{"AreaID":611021, "name":"洛南县", "CityID":611000, "AreaSort":611000},
+{"AreaID":611022, "name":"丹凤县", "CityID":611000, "AreaSort":611000},
+{"AreaID":611023, "name":"商南县", "CityID":611000, "AreaSort":611000},
+{"AreaID":610204, "name":"耀州区", "CityID":610200, "AreaSort":610200},
+{"AreaID":610203, "name":"印台区", "CityID":610200, "AreaSort":610200},
+{"AreaID":610202, "name":"王益区", "CityID":610200, "AreaSort":610200},
+{"AreaID":610222, "name":"宜君县", "CityID":610200, "AreaSort":610200},
+{"AreaID":610322, "name":"凤翔县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610323, "name":"岐山县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610330, "name":"凤县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610331, "name":"太白县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610324, "name":"扶风县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610327, "name":"陇县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610326, "name":"眉县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610329, "name":"麟游县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610303, "name":"金台区", "CityID":610300, "AreaSort":610300},
+{"AreaID":610328, "name":"千阳县", "CityID":610300, "AreaSort":610300},
+{"AreaID":610302, "name":"渭滨区", "CityID":610300, "AreaSort":610300},
+{"AreaID":610304, "name":"陈仓区", "CityID":610300, "AreaSort":610300},
+{"AreaID":610929, "name":"白河县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610928, "name":"旬阳县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610927, "name":"镇坪县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610926, "name":"平利县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610925, "name":"岚皋县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610924, "name":"紫阳县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610923, "name":"宁陕县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610922, "name":"石泉县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610921, "name":"汉阴县", "CityID":610900, "AreaSort":610900},
+{"AreaID":610902, "name":"汉滨区", "CityID":610900, "AreaSort":610900},
+{"AreaID":610629, "name":"洛川县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610626, "name":"吴起县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610625, "name":"志丹县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610628, "name":"富县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610627, "name":"甘泉县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610622, "name":"延川县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610621, "name":"延长县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610624, "name":"安塞县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610632, "name":"黄陵县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610623, "name":"子长县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610630, "name":"宜川县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610631, "name":"黄龙县", "CityID":610600, "AreaSort":610600},
+{"AreaID":610602, "name":"宝塔区", "CityID":610600, "AreaSort":610600},
+{"AreaID":620525, "name":"张家川回族自治县", "CityID":620500, "AreaSort":620500},
+{"AreaID":620502, "name":"秦州区", "CityID":620500, "AreaSort":620500},
+{"AreaID":620521, "name":"清水县", "CityID":620500, "AreaSort":620500},
+{"AreaID":620503, "name":"麦积区", "CityID":620500, "AreaSort":620500},
+{"AreaID":620522, "name":"秦安县", "CityID":620500, "AreaSort":620500},
+{"AreaID":620523, "name":"甘谷县", "CityID":620500, "AreaSort":620500},
+{"AreaID":620524, "name":"武山县", "CityID":620500, "AreaSort":620500},
+{"AreaID":621126, "name":"岷县", "CityID":621100, "AreaSort":621100},
+{"AreaID":621102, "name":"安定区", "CityID":621100, "AreaSort":621100},
+{"AreaID":621125, "name":"漳县", "CityID":621100, "AreaSort":621100},
+{"AreaID":621124, "name":"临洮县", "CityID":621100, "AreaSort":621100},
+{"AreaID":621123, "name":"渭源县", "CityID":621100, "AreaSort":621100},
+{"AreaID":621122, "name":"陇西县", "CityID":621100, "AreaSort":621100},
+{"AreaID":621121, "name":"通渭县", "CityID":621100, "AreaSort":621100},
+{"AreaID":620302, "name":"金川区", "CityID":620300, "AreaSort":620300},
+{"AreaID":620321, "name":"永昌县", "CityID":620300, "AreaSort":620300},
+{"AreaID":622921, "name":"临夏县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622922, "name":"康乐县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622925, "name":"和政县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622926, "name":"东乡族自治县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622923, "name":"永靖县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622924, "name":"广河县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622927, "name":"积石山保安族东乡族撒拉族自治县", "CityID":622900, "AreaSort":622900},
+{"AreaID":622901, "name":"临夏市", "CityID":622900, "AreaSort":622900},
+{"AreaID":620421, "name":"靖远县", "CityID":620400, "AreaSort":620400},
+{"AreaID":620423, "name":"景泰县", "CityID":620400, "AreaSort":620400},
+{"AreaID":620402, "name":"白银区", "CityID":620400, "AreaSort":620400},
+{"AreaID":620422, "name":"会宁县", "CityID":620400, "AreaSort":620400},
+{"AreaID":620403, "name":"平川区", "CityID":620400, "AreaSort":620400},
+{"AreaID":621022, "name":"环县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621021, "name":"庆城县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621002, "name":"西峰区", "CityID":621000, "AreaSort":621000},
+{"AreaID":621026, "name":"宁县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621025, "name":"正宁县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621024, "name":"合水县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621023, "name":"华池县", "CityID":621000, "AreaSort":621000},
+{"AreaID":621027, "name":"镇原县", "CityID":621000, "AreaSort":621000},
+{"AreaID":620982, "name":"敦煌市", "CityID":620900, "AreaSort":620900},
+{"AreaID":620924, "name":"阿克塞哈萨克族自治县", "CityID":620900, "AreaSort":620900},
+{"AreaID":620981, "name":"玉门市", "CityID":620900, "AreaSort":620900},
+{"AreaID":620923, "name":"肃北蒙古族自治县", "CityID":620900, "AreaSort":620900},
+{"AreaID":620922, "name":"瓜州县", "CityID":620900, "AreaSort":620900},
+{"AreaID":620921, "name":"金塔县", "CityID":620900, "AreaSort":620900},
+{"AreaID":620902, "name":"肃州区", "CityID":620900, "AreaSort":620900},
+{"AreaID":620602, "name":"凉州区", "CityID":620600, "AreaSort":620600},
+{"AreaID":620621, "name":"民勤县", "CityID":620600, "AreaSort":620600},
+{"AreaID":620622, "name":"古浪县", "CityID":620600, "AreaSort":620600},
+{"AreaID":620623, "name":"天祝藏族自治县", "CityID":620600, "AreaSort":620600},
+{"AreaID":621227, "name":"徽县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621228, "name":"两当县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621225, "name":"西和县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621226, "name":"礼县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621202, "name":"武都区", "CityID":621200, "AreaSort":621200},
+{"AreaID":621222, "name":"文县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621221, "name":"成县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621224, "name":"康县", "CityID":621200, "AreaSort":621200},
+{"AreaID":621223, "name":"宕昌县", "CityID":621200, "AreaSort":621200},
+{"AreaID":620724, "name":"高台县", "CityID":620700, "AreaSort":620700},
+{"AreaID":620723, "name":"临泽县", "CityID":620700, "AreaSort":620700},
+{"AreaID":620725, "name":"山丹县", "CityID":620700, "AreaSort":620700},
+{"AreaID":620702, "name":"甘州区", "CityID":620700, "AreaSort":620700},
+{"AreaID":620722, "name":"民乐县", "CityID":620700, "AreaSort":620700},
+{"AreaID":620721, "name":"肃南裕固族自治县", "CityID":620700, "AreaSort":620700},
+{"AreaID":620821, "name":"泾川县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620822, "name":"灵台县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620823, "name":"崇信县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620824, "name":"华亭县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620825, "name":"庄浪县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620826, "name":"静宁县", "CityID":620800, "AreaSort":620800},
+{"AreaID":620802, "name":"崆峒区", "CityID":620800, "AreaSort":620800},
+{"AreaID":620123, "name":"榆中县", "CityID":620100, "AreaSort":620100},
+{"AreaID":620111, "name":"红古区", "CityID":620100, "AreaSort":620100},
+{"AreaID":620121, "name":"永登县", "CityID":620100, "AreaSort":620100},
+{"AreaID":620122, "name":"皋兰县", "CityID":620100, "AreaSort":620100},
+{"AreaID":620104, "name":"西固区", "CityID":620100, "AreaSort":620100},
+{"AreaID":620102, "name":"城关区", "CityID":620100, "AreaSort":620100},
+{"AreaID":620103, "name":"七里河区", "CityID":620100, "AreaSort":620100},
+{"AreaID":620105, "name":"安宁区", "CityID":620100, "AreaSort":620100},
+{"AreaID":623026, "name":"碌曲县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623025, "name":"玛曲县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623027, "name":"夏河县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623022, "name":"卓尼县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623021, "name":"临潭县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623024, "name":"迭部县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623023, "name":"舟曲县", "CityID":623000, "AreaSort":623000},
+{"AreaID":623001, "name":"合作市", "CityID":623000, "AreaSort":623000},
+{"AreaID":632222, "name":"祁连县", "CityID":632200, "AreaSort":632200},
+{"AreaID":632221, "name":"门源回族自治县", "CityID":632200, "AreaSort":632200},
+{"AreaID":632224, "name":"刚察县", "CityID":632200, "AreaSort":632200},
+{"AreaID":632223, "name":"海晏县", "CityID":632200, "AreaSort":632200},
+{"AreaID":632522, "name":"同德县", "CityID":632500, "AreaSort":632500},
+{"AreaID":632523, "name":"贵德县", "CityID":632500, "AreaSort":632500},
+{"AreaID":632524, "name":"兴海县", "CityID":632500, "AreaSort":632500},
+{"AreaID":632525, "name":"贵南县", "CityID":632500, "AreaSort":632500},
+{"AreaID":632521, "name":"共和县", "CityID":632500, "AreaSort":632500},
+{"AreaID":630222, "name":"民和回族土族自治县", "CityID":630200, "AreaSort":630200},
+{"AreaID":630223, "name":"互助土族自治县", "CityID":630200, "AreaSort":630200},
+{"AreaID":630224, "name":"化隆回族自治县", "CityID":630200, "AreaSort":630200},
+{"AreaID":630203, "name":"平安区", "CityID":630200, "AreaSort":630200},
+{"AreaID":630225, "name":"循化撒拉族自治县", "CityID":630200, "AreaSort":630200},
+{"AreaID":630202, "name":"乐都区", "CityID":630200, "AreaSort":630200},
+{"AreaID":632822, "name":"都兰县", "CityID":632800, "AreaSort":632800},
+{"AreaID":632821, "name":"乌兰县", "CityID":632800, "AreaSort":632800},
+{"AreaID":632802, "name":"德令哈市", "CityID":632800, "AreaSort":632800},
+{"AreaID":632801, "name":"格尔木市", "CityID":632800, "AreaSort":632800},
+{"AreaID":632825, "name":"海西蒙古族藏族自治州直辖", "CityID":632800, "AreaSort":632800},
+{"AreaID":632823, "name":"天峻县", "CityID":632800, "AreaSort":632800},
+{"AreaID":632726, "name":"曲麻莱县", "CityID":632700, "AreaSort":632700},
+{"AreaID":632725, "name":"囊谦县", "CityID":632700, "AreaSort":632700},
+{"AreaID":632724, "name":"治多县", "CityID":632700, "AreaSort":632700},
+{"AreaID":632723, "name":"称多县", "CityID":632700, "AreaSort":632700},
+{"AreaID":632722, "name":"杂多县", "CityID":632700, "AreaSort":632700},
+{"AreaID":632701, "name":"玉树市", "CityID":632700, "AreaSort":632700},
+{"AreaID":632323, "name":"泽库县", "CityID":632300, "AreaSort":632300},
+{"AreaID":632324, "name":"河南蒙古族自治县", "CityID":632300, "AreaSort":632300},
+{"AreaID":632322, "name":"尖扎县", "CityID":632300, "AreaSort":632300},
+{"AreaID":632321, "name":"同仁县", "CityID":632300, "AreaSort":632300},
+{"AreaID":632624, "name":"达日县", "CityID":632600, "AreaSort":632600},
+{"AreaID":632623, "name":"甘德县", "CityID":632600, "AreaSort":632600},
+{"AreaID":632622, "name":"班玛县", "CityID":632600, "AreaSort":632600},
+{"AreaID":632621, "name":"玛沁县", "CityID":632600, "AreaSort":632600},
+{"AreaID":632626, "name":"玛多县", "CityID":632600, "AreaSort":632600},
+{"AreaID":632625, "name":"久治县", "CityID":632600, "AreaSort":632600},
+{"AreaID":630102, "name":"城东区", "CityID":630100, "AreaSort":630100},
+{"AreaID":630103, "name":"城中区", "CityID":630100, "AreaSort":630100},
+{"AreaID":630104, "name":"城西区", "CityID":630100, "AreaSort":630100},
+{"AreaID":630105, "name":"城北区", "CityID":630100, "AreaSort":630100},
+{"AreaID":630123, "name":"湟源县", "CityID":630100, "AreaSort":630100},
+{"AreaID":630122, "name":"湟中县", "CityID":630100, "AreaSort":630100},
+{"AreaID":630121, "name":"大通回族土族自治县", "CityID":630100, "AreaSort":630100},
+{"AreaID":640302, "name":"利通区", "CityID":640300, "AreaSort":640300},
+{"AreaID":640381, "name":"青铜峡市", "CityID":640300, "AreaSort":640300},
+{"AreaID":640303, "name":"红寺堡区", "CityID":640300, "AreaSort":640300},
+{"AreaID":640324, "name":"同心县", "CityID":640300, "AreaSort":640300},
+{"AreaID":640323, "name":"盐池县", "CityID":640300, "AreaSort":640300},
+{"AreaID":640402, "name":"原州区", "CityID":640400, "AreaSort":640400},
+{"AreaID":640422, "name":"西吉县", "CityID":640400, "AreaSort":640400},
+{"AreaID":640423, "name":"隆德县", "CityID":640400, "AreaSort":640400},
+{"AreaID":640424, "name":"泾源县", "CityID":640400, "AreaSort":640400},
+{"AreaID":640425, "name":"彭阳县", "CityID":640400, "AreaSort":640400},
+{"AreaID":640522, "name":"海原县", "CityID":640500, "AreaSort":640500},
+{"AreaID":640521, "name":"中宁县", "CityID":640500, "AreaSort":640500},
+{"AreaID":640502, "name":"沙坡头区", "CityID":640500, "AreaSort":640500},
+{"AreaID":640181, "name":"灵武市", "CityID":640100, "AreaSort":640100},
+{"AreaID":640122, "name":"贺兰县", "CityID":640100, "AreaSort":640100},
+{"AreaID":640121, "name":"永宁县", "CityID":640100, "AreaSort":640100},
+{"AreaID":640104, "name":"兴庆区", "CityID":640100, "AreaSort":640100},
+{"AreaID":640105, "name":"西夏区", "CityID":640100, "AreaSort":640100},
+{"AreaID":640106, "name":"金凤区", "CityID":640100, "AreaSort":640100},
+{"AreaID":640221, "name":"平罗县", "CityID":640200, "AreaSort":640200},
+{"AreaID":640205, "name":"惠农区", "CityID":640200, "AreaSort":640200},
+{"AreaID":640202, "name":"大武口区", "CityID":640200, "AreaSort":640200},
+{"AreaID":652301, "name":"昌吉市", "CityID":652300, "AreaSort":652300},
+{"AreaID":652302, "name":"阜康市", "CityID":652300, "AreaSort":652300},
+{"AreaID":652327, "name":"吉木萨尔县", "CityID":652300, "AreaSort":652300},
+{"AreaID":652328, "name":"木垒哈萨克自治县", "CityID":652300, "AreaSort":652300},
+{"AreaID":652323, "name":"呼图壁县", "CityID":652300, "AreaSort":652300},
+{"AreaID":652324, "name":"玛纳斯县", "CityID":652300, "AreaSort":652300},
+{"AreaID":652325, "name":"奇台县", "CityID":652300, "AreaSort":652300},
+{"AreaID":650402, "name":"高昌区", "CityID":650400, "AreaSort":650400},
+{"AreaID":650421, "name":"鄯善县", "CityID":650400, "AreaSort":650400},
+{"AreaID":650422, "name":"托克逊县", "CityID":650400, "AreaSort":650400},
+{"AreaID":653001, "name":"阿图什市", "CityID":653000, "AreaSort":653000},
+{"AreaID":653022, "name":"阿克陶县", "CityID":653000, "AreaSort":653000},
+{"AreaID":653023, "name":"阿合奇县", "CityID":653000, "AreaSort":653000},
+{"AreaID":653024, "name":"乌恰县", "CityID":653000, "AreaSort":653000},
+{"AreaID":652826, "name":"焉耆回族自治县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652825, "name":"且末县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652828, "name":"和硕县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652827, "name":"和静县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652829, "name":"博湖县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652801, "name":"库尔勒市", "CityID":652800, "AreaSort":652800},
+{"AreaID":652822, "name":"轮台县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652824, "name":"若羌县", "CityID":652800, "AreaSort":652800},
+{"AreaID":652823, "name":"尉犁县", "CityID":652800, "AreaSort":652800},
+{"AreaID":653127, "name":"麦盖提县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653128, "name":"岳普湖县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653125, "name":"莎车县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653126, "name":"叶城县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653129, "name":"伽师县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653131, "name":"塔什库尔干塔吉克自治县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653130, "name":"巴楚县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653101, "name":"喀什市", "CityID":653100, "AreaSort":653100},
+{"AreaID":653122, "name":"疏勒县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653121, "name":"疏附县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653124, "name":"泽普县", "CityID":653100, "AreaSort":653100},
+{"AreaID":653123, "name":"英吉沙县", "CityID":653100, "AreaSort":653100},
+{"AreaID":654324, "name":"哈巴河县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654325, "name":"青河县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654326, "name":"吉木乃县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654323, "name":"福海县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654322, "name":"富蕴县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654321, "name":"布尔津县", "CityID":654300, "AreaSort":654300},
+{"AreaID":654301, "name":"阿勒泰市", "CityID":654300, "AreaSort":654300},
+{"AreaID":654022, "name":"察布查尔锡伯自治县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654004, "name":"霍尔果斯市", "CityID":654000, "AreaSort":654000},
+{"AreaID":654021, "name":"伊宁县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654003, "name":"奎屯市", "CityID":654000, "AreaSort":654000},
+{"AreaID":654002, "name":"伊宁市", "CityID":654000, "AreaSort":654000},
+{"AreaID":654026, "name":"昭苏县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654025, "name":"新源县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654028, "name":"尼勒克县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654024, "name":"巩留县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654027, "name":"特克斯县", "CityID":654000, "AreaSort":654000},
+{"AreaID":654023, "name":"霍城县", "CityID":654000, "AreaSort":654000},
+{"AreaID":653225, "name":"策勒县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653224, "name":"洛浦县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653201, "name":"和田市", "CityID":653200, "AreaSort":653200},
+{"AreaID":653227, "name":"民丰县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653226, "name":"于田县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653222, "name":"墨玉县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653223, "name":"皮山县", "CityID":653200, "AreaSort":653200},
+{"AreaID":653221, "name":"和田县", "CityID":653200, "AreaSort":653200},
+{"AreaID":654202, "name":"乌苏市", "CityID":654200, "AreaSort":654200},
+{"AreaID":654201, "name":"塔城市", "CityID":654200, "AreaSort":654200},
+{"AreaID":654226, "name":"和布克赛尔蒙古自治县", "CityID":654200, "AreaSort":654200},
+{"AreaID":654224, "name":"托里县", "CityID":654200, "AreaSort":654200},
+{"AreaID":654225, "name":"裕民县", "CityID":654200, "AreaSort":654200},
+{"AreaID":654223, "name":"沙湾县", "CityID":654200, "AreaSort":654200},
+{"AreaID":654221, "name":"额敏县", "CityID":654200, "AreaSort":654200},
+{"AreaID":652223, "name":"伊吾县", "CityID":652200, "AreaSort":652200},
+{"AreaID":652201, "name":"哈密市", "CityID":652200, "AreaSort":652200},
+{"AreaID":652222, "name":"巴里坤哈萨克自治县", "CityID":652200, "AreaSort":652200},
+{"AreaID":652702, "name":"阿拉山口市", "CityID":652700, "AreaSort":652700},
+{"AreaID":652701, "name":"博乐市", "CityID":652700, "AreaSort":652700},
+{"AreaID":652723, "name":"温泉县", "CityID":652700, "AreaSort":652700},
+{"AreaID":652722, "name":"精河县", "CityID":652700, "AreaSort":652700},
+{"AreaID":652923, "name":"库车县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652922, "name":"温宿县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652929, "name":"柯坪县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652928, "name":"阿瓦提县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652901, "name":"阿克苏市", "CityID":652900, "AreaSort":652900},
+{"AreaID":652925, "name":"新和县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652924, "name":"沙雅县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652927, "name":"乌什县", "CityID":652900, "AreaSort":652900},
+{"AreaID":652926, "name":"拜城县", "CityID":652900, "AreaSort":652900},
+{"AreaID":650109, "name":"米东区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650121, "name":"乌鲁木齐县", "CityID":650100, "AreaSort":650100},
+{"AreaID":650102, "name":"天山区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650103, "name":"沙依巴克区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650106, "name":"头屯河区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650107, "name":"达坂城区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650104, "name":"新市区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650105, "name":"水磨沟区", "CityID":650100, "AreaSort":650100},
+{"AreaID":650205, "name":"乌尔禾区", "CityID":650200, "AreaSort":650200},
+{"AreaID":650203, "name":"克拉玛依区", "CityID":650200, "AreaSort":650200},
+{"AreaID":650204, "name":"白碱滩区", "CityID":650200, "AreaSort":650200},
+{"AreaID":650202, "name":"独山子区", "CityID":650200, "AreaSort":650200}
+]
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/assets/china_cities.db b/JQ_ELOVE/src/main/assets/china_cities.db
new file mode 100644
index 0000000000000000000000000000000000000000..16774c705afd601ff62ec5f7abe54f81436b93b2
Binary files /dev/null and b/JQ_ELOVE/src/main/assets/china_cities.db differ
diff --git a/JQ_ELOVE/src/main/assets/city.json b/JQ_ELOVE/src/main/assets/city.json
new file mode 100644
index 0000000000000000000000000000000000000000..a246dc1ff2fdc3805d8404cff1ea9a71d2eaeb10
--- /dev/null
+++ b/JQ_ELOVE/src/main/assets/city.json
@@ -0,0 +1,369 @@
+[{"ProID":110000, "name":"北京市市辖区", "CityID":110100, "CitySort":110000},
+{"ProID":120000, "name":"天津市市辖区", "CityID":120100, "CitySort":120000},
+{"ProID":120000, "name":"天津市郊县", "CityID":120200, "CitySort":120000},
+{"ProID":130000, "name":"衡水市", "CityID":131100, "CitySort":130000},
+{"ProID":130000, "name":"唐山市", "CityID":130200, "CitySort":130000},
+{"ProID":130000, "name":"张家口市", "CityID":130700, "CitySort":130000},
+{"ProID":130000, "name":"邢台市", "CityID":130500, "CitySort":130000},
+{"ProID":130000, "name":"秦皇岛市", "CityID":130300, "CitySort":130000},
+{"ProID":130000, "name":"廊坊市", "CityID":131000, "CitySort":130000},
+{"ProID":130000, "name":"保定市", "CityID":130600, "CitySort":130000},
+{"ProID":130000, "name":"石家庄市", "CityID":130100, "CitySort":130000},
+{"ProID":130000, "name":"沧州市", "CityID":130900, "CitySort":130000},
+{"ProID":130000, "name":"承德市", "CityID":130800, "CitySort":130000},
+{"ProID":130000, "name":"邯郸市", "CityID":130400, "CitySort":130000},
+{"ProID":140000, "name":"太原市", "CityID":140100, "CitySort":140000},
+{"ProID":140000, "name":"晋城市", "CityID":140500, "CitySort":140000},
+{"ProID":140000, "name":"运城市", "CityID":140800, "CitySort":140000},
+{"ProID":140000, "name":"阳泉市", "CityID":140300, "CitySort":140000},
+{"ProID":140000, "name":"忻州市", "CityID":140900, "CitySort":140000},
+{"ProID":140000, "name":"晋中市", "CityID":140700, "CitySort":140000},
+{"ProID":140000, "name":"长治市", "CityID":140400, "CitySort":140000},
+{"ProID":140000, "name":"吕梁市", "CityID":141100, "CitySort":140000},
+{"ProID":140000, "name":"临汾市", "CityID":141000, "CitySort":140000},
+{"ProID":140000, "name":"大同市", "CityID":140200, "CitySort":140000},
+{"ProID":140000, "name":"朔州市", "CityID":140600, "CitySort":140000},
+{"ProID":150000, "name":"乌海市", "CityID":150300, "CitySort":150000},
+{"ProID":150000, "name":"赤峰市", "CityID":150400, "CitySort":150000},
+{"ProID":150000, "name":"阿拉善盟", "CityID":152900, "CitySort":150000},
+{"ProID":150000, "name":"巴彦淖尔市", "CityID":150800, "CitySort":150000},
+{"ProID":150000, "name":"通辽市", "CityID":150500, "CitySort":150000},
+{"ProID":150000, "name":"包头市", "CityID":150200, "CitySort":150000},
+{"ProID":150000, "name":"兴安盟", "CityID":152200, "CitySort":150000},
+{"ProID":150000, "name":"乌兰察布市", "CityID":150900, "CitySort":150000},
+{"ProID":150000, "name":"鄂尔多斯市", "CityID":150600, "CitySort":150000},
+{"ProID":150000, "name":"呼和浩特市", "CityID":150100, "CitySort":150000},
+{"ProID":150000, "name":"锡林郭勒盟", "CityID":152500, "CitySort":150000},
+{"ProID":150000, "name":"呼伦贝尔市", "CityID":150700, "CitySort":150000},
+{"ProID":210000, "name":"盘锦市", "CityID":211100, "CitySort":210000},
+{"ProID":210000, "name":"锦州市", "CityID":210700, "CitySort":210000},
+{"ProID":210000, "name":"朝阳市", "CityID":211300, "CitySort":210000},
+{"ProID":210000, "name":"阜新市", "CityID":210900, "CitySort":210000},
+{"ProID":210000, "name":"营口市", "CityID":210800, "CitySort":210000},
+{"ProID":210000, "name":"辽阳市", "CityID":211000, "CitySort":210000},
+{"ProID":210000, "name":"沈阳市", "CityID":210100, "CitySort":210000},
+{"ProID":210000, "name":"葫芦岛市", "CityID":211400, "CitySort":210000},
+{"ProID":210000, "name":"丹东市", "CityID":210600, "CitySort":210000},
+{"ProID":210000, "name":"抚顺市", "CityID":210400, "CitySort":210000},
+{"ProID":210000, "name":"铁岭市", "CityID":211200, "CitySort":210000},
+{"ProID":210000, "name":"鞍山市", "CityID":210300, "CitySort":210000},
+{"ProID":210000, "name":"本溪市", "CityID":210500, "CitySort":210000},
+{"ProID":210000, "name":"大连市", "CityID":210200, "CitySort":210000},
+{"ProID":220000, "name":"松原市", "CityID":220700, "CitySort":220000},
+{"ProID":220000, "name":"辽源市", "CityID":220400, "CitySort":220000},
+{"ProID":220000, "name":"吉林市", "CityID":220200, "CitySort":220000},
+{"ProID":220000, "name":"长春市", "CityID":220100, "CitySort":220000},
+{"ProID":220000, "name":"白城市", "CityID":220800, "CitySort":220000},
+{"ProID":220000, "name":"通化市", "CityID":220500, "CitySort":220000},
+{"ProID":220000, "name":"四平市", "CityID":220300, "CitySort":220000},
+{"ProID":220000, "name":"延边朝鲜族自治州", "CityID":222400, "CitySort":220000},
+{"ProID":220000, "name":"白山市", "CityID":220600, "CitySort":220000},
+{"ProID":230000, "name":"牡丹江市", "CityID":231000, "CitySort":230000},
+{"ProID":230000, "name":"鹤岗市", "CityID":230400, "CitySort":230000},
+{"ProID":230000, "name":"佳木斯市", "CityID":230800, "CitySort":230000},
+{"ProID":230000, "name":"黑河市", "CityID":231100, "CitySort":230000},
+{"ProID":230000, "name":"大兴安岭地区", "CityID":232700, "CitySort":230000},
+{"ProID":230000, "name":"鸡西市", "CityID":230300, "CitySort":230000},
+{"ProID":230000, "name":"大庆市", "CityID":230600, "CitySort":230000},
+{"ProID":230000, "name":"哈尔滨市", "CityID":230100, "CitySort":230000},
+{"ProID":230000, "name":"伊春市", "CityID":230700, "CitySort":230000},
+{"ProID":230000, "name":"绥化市", "CityID":231200, "CitySort":230000},
+{"ProID":230000, "name":"齐齐哈尔市", "CityID":230200, "CitySort":230000},
+{"ProID":230000, "name":"七台河市", "CityID":230900, "CitySort":230000},
+{"ProID":230000, "name":"双鸭山市", "CityID":230500, "CitySort":230000},
+{"ProID":310000, "name":"上海市市辖区", "CityID":310100, "CitySort":310000},
+{"ProID":310000, "name":"上海市郊县", "CityID":310200, "CitySort":310000},
+{"ProID":320000, "name":"常州市", "CityID":320400, "CitySort":320000},
+{"ProID":320000, "name":"徐州市", "CityID":320300, "CitySort":320000},
+{"ProID":320000, "name":"泰州市", "CityID":321200, "CitySort":320000},
+{"ProID":320000, "name":"苏州市", "CityID":320500, "CitySort":320000},
+{"ProID":320000, "name":"无锡市", "CityID":320200, "CitySort":320000},
+{"ProID":320000, "name":"连云港市", "CityID":320700, "CitySort":320000},
+{"ProID":320000, "name":"扬州市", "CityID":321000, "CitySort":320000},
+{"ProID":320000, "name":"镇江市", "CityID":321100, "CitySort":320000},
+{"ProID":320000, "name":"淮安市", "CityID":320800, "CitySort":320000},
+{"ProID":320000, "name":"盐城市", "CityID":320900, "CitySort":320000},
+{"ProID":320000, "name":"南京市", "CityID":320100, "CitySort":320000},
+{"ProID":320000, "name":"宿迁市", "CityID":321300, "CitySort":320000},
+{"ProID":320000, "name":"南通市", "CityID":320600, "CitySort":320000},
+{"ProID":330000, "name":"绍兴市", "CityID":330600, "CitySort":330000},
+{"ProID":330000, "name":"宁波市", "CityID":330200, "CitySort":330000},
+{"ProID":330000, "name":"杭州市", "CityID":330100, "CitySort":330000},
+{"ProID":330000, "name":"舟山市", "CityID":330900, "CitySort":330000},
+{"ProID":330000, "name":"湖州市", "CityID":330500, "CitySort":330000},
+{"ProID":330000, "name":"台州市", "CityID":331000, "CitySort":330000},
+{"ProID":330000, "name":"温州市", "CityID":330300, "CitySort":330000},
+{"ProID":330000, "name":"嘉兴市", "CityID":330400, "CitySort":330000},
+{"ProID":330000, "name":"衢州市", "CityID":330800, "CitySort":330000},
+{"ProID":330000, "name":"丽水市", "CityID":331100, "CitySort":330000},
+{"ProID":330000, "name":"金华市", "CityID":330700, "CitySort":330000},
+{"ProID":340000, "name":"淮北市", "CityID":340600, "CitySort":340000},
+{"ProID":340000, "name":"滁州市", "CityID":341100, "CitySort":340000},
+{"ProID":340000, "name":"铜陵市", "CityID":340700, "CitySort":340000},
+{"ProID":340000, "name":"池州市", "CityID":341700, "CitySort":340000},
+{"ProID":340000, "name":"合肥市", "CityID":340100, "CitySort":340000},
+{"ProID":340000, "name":"宣城市", "CityID":341800, "CitySort":340000},
+{"ProID":340000, "name":"六安市", "CityID":341500, "CitySort":340000},
+{"ProID":340000, "name":"宿州市", "CityID":341300, "CitySort":340000},
+{"ProID":340000, "name":"阜阳市", "CityID":341200, "CitySort":340000},
+{"ProID":340000, "name":"马鞍山市", "CityID":340500, "CitySort":340000},
+{"ProID":340000, "name":"芜湖市", "CityID":340200, "CitySort":340000},
+{"ProID":340000, "name":"安庆市", "CityID":340800, "CitySort":340000},
+{"ProID":340000, "name":"亳州市", "CityID":341600, "CitySort":340000},
+{"ProID":340000, "name":"淮南市", "CityID":340400, "CitySort":340000},
+{"ProID":340000, "name":"蚌埠市", "CityID":340300, "CitySort":340000},
+{"ProID":340000, "name":"黄山市", "CityID":341000, "CitySort":340000},
+{"ProID":350000, "name":"龙岩市", "CityID":350800, "CitySort":350000},
+{"ProID":350000, "name":"三明市", "CityID":350400, "CitySort":350000},
+{"ProID":350000, "name":"南平市", "CityID":350700, "CitySort":350000},
+{"ProID":350000, "name":"莆田市", "CityID":350300, "CitySort":350000},
+{"ProID":350000, "name":"厦门市", "CityID":350200, "CitySort":350000},
+{"ProID":350000, "name":"福州市", "CityID":350100, "CitySort":350000},
+{"ProID":350000, "name":"漳州市", "CityID":350600, "CitySort":350000},
+{"ProID":350000, "name":"宁德市", "CityID":350900, "CitySort":350000},
+{"ProID":350000, "name":"泉州市", "CityID":350500, "CitySort":350000},
+{"ProID":360000, "name":"吉安市", "CityID":360800, "CitySort":360000},
+{"ProID":360000, "name":"萍乡市", "CityID":360300, "CitySort":360000},
+{"ProID":360000, "name":"上饶市", "CityID":361100, "CitySort":360000},
+{"ProID":360000, "name":"赣州市", "CityID":360700, "CitySort":360000},
+{"ProID":360000, "name":"抚州市", "CityID":361000, "CitySort":360000},
+{"ProID":360000, "name":"九江市", "CityID":360400, "CitySort":360000},
+{"ProID":360000, "name":"南昌市", "CityID":360100, "CitySort":360000},
+{"ProID":360000, "name":"新余市", "CityID":360500, "CitySort":360000},
+{"ProID":360000, "name":"宜春市", "CityID":360900, "CitySort":360000},
+{"ProID":360000, "name":"景德镇市", "CityID":360200, "CitySort":360000},
+{"ProID":360000, "name":"鹰潭市", "CityID":360600, "CitySort":360000},
+{"ProID":370000, "name":"临沂市", "CityID":371300, "CitySort":370000},
+{"ProID":370000, "name":"菏泽市", "CityID":371700, "CitySort":370000},
+{"ProID":370000, "name":"东营市", "CityID":370500, "CitySort":370000},
+{"ProID":370000, "name":"威海市", "CityID":371000, "CitySort":370000},
+{"ProID":370000, "name":"青岛市", "CityID":370200, "CitySort":370000},
+{"ProID":370000, "name":"济宁市", "CityID":370800, "CitySort":370000},
+{"ProID":370000, "name":"潍坊市", "CityID":370700, "CitySort":370000},
+{"ProID":370000, "name":"滨州市", "CityID":371600, "CitySort":370000},
+{"ProID":370000, "name":"济南市", "CityID":370100, "CitySort":370000},
+{"ProID":370000, "name":"淄博市", "CityID":370300, "CitySort":370000},
+{"ProID":370000, "name":"泰安市", "CityID":370900, "CitySort":370000},
+{"ProID":370000, "name":"烟台市", "CityID":370600, "CitySort":370000},
+{"ProID":370000, "name":"莱芜市", "CityID":371200, "CitySort":370000},
+{"ProID":370000, "name":"聊城市", "CityID":371500, "CitySort":370000},
+{"ProID":370000, "name":"德州市", "CityID":371400, "CitySort":370000},
+{"ProID":370000, "name":"日照市", "CityID":371100, "CitySort":370000},
+{"ProID":370000, "name":"枣庄市", "CityID":370400, "CitySort":370000},
+{"ProID":410000, "name":"鹤壁市", "CityID":410600, "CitySort":410000},
+{"ProID":410000, "name":"开封市", "CityID":410200, "CitySort":410000},
+{"ProID":410000, "name":"新乡市", "CityID":410700, "CitySort":410000},
+{"ProID":410000, "name":"济源市", "CityID":419001, "CitySort":410000},
+{"ProID":410000, "name":"周口市", "CityID":411600, "CitySort":410000},
+{"ProID":410000, "name":"三门峡市", "CityID":411200, "CitySort":410000},
+{"ProID":410000, "name":"平顶山市", "CityID":410400, "CitySort":410000},
+{"ProID":410000, "name":"商丘市", "CityID":411400, "CitySort":410000},
+{"ProID":410000, "name":"濮阳市", "CityID":410900, "CitySort":410000},
+{"ProID":410000, "name":"信阳市", "CityID":411500, "CitySort":410000},
+{"ProID":410000, "name":"漯河市", "CityID":411100, "CitySort":410000},
+{"ProID":410000, "name":"南阳市", "CityID":411300, "CitySort":410000},
+{"ProID":410000, "name":"洛阳市", "CityID":410300, "CitySort":410000},
+{"ProID":410000, "name":"郑州市", "CityID":410100, "CitySort":410000},
+{"ProID":410000, "name":"驻马店市", "CityID":411700, "CitySort":410000},
+{"ProID":410000, "name":"许昌市", "CityID":411000, "CitySort":410000},
+{"ProID":410000, "name":"焦作市", "CityID":410800, "CitySort":410000},
+{"ProID":410000, "name":"安阳市", "CityID":410500, "CitySort":410000},
+{"ProID":420000, "name":"荆门市", "CityID":420800, "CitySort":420000},
+{"ProID":420000, "name":"黄冈市", "CityID":421100, "CitySort":420000},
+{"ProID":420000, "name":"孝感市", "CityID":420900, "CitySort":420000},
+{"ProID":420000, "name":"咸宁市", "CityID":421200, "CitySort":420000},
+{"ProID":420000, "name":"随州市", "CityID":421300, "CitySort":420000},
+{"ProID":420000, "name":"十堰市", "CityID":420300, "CitySort":420000},
+{"ProID":420000, "name":"襄阳市", "CityID":420600, "CitySort":420000},
+{"ProID":420000, "name":"神农架林区", "CityID":429021, "CitySort":420000},
+{"ProID":420000, "name":"宜昌市", "CityID":420500, "CitySort":420000},
+{"ProID":420000, "name":"武汉市", "CityID":420100, "CitySort":420000},
+{"ProID":420000, "name":"恩施土家族苗族自治州", "CityID":422800, "CitySort":420000},
+{"ProID":420000, "name":"鄂州市", "CityID":420700, "CitySort":420000},
+{"ProID":420000, "name":"天门市", "CityID":429006, "CitySort":420000},
+{"ProID":420000, "name":"黄石市", "CityID":420200, "CitySort":420000},
+{"ProID":420000, "name":"潜江市", "CityID":429005, "CitySort":420000},
+{"ProID":420000, "name":"仙桃市", "CityID":429004, "CitySort":420000},
+{"ProID":420000, "name":"荆州市", "CityID":421000, "CitySort":420000},
+{"ProID":430000, "name":"湘潭市", "CityID":430300, "CitySort":430000},
+{"ProID":430000, "name":"湘西土家族苗族自治州", "CityID":433100, "CitySort":430000},
+{"ProID":430000, "name":"株洲市", "CityID":430200, "CitySort":430000},
+{"ProID":430000, "name":"怀化市", "CityID":431200, "CitySort":430000},
+{"ProID":430000, "name":"邵阳市", "CityID":430500, "CitySort":430000},
+{"ProID":430000, "name":"永州市", "CityID":431100, "CitySort":430000},
+{"ProID":430000, "name":"张家界市", "CityID":430800, "CitySort":430000},
+{"ProID":430000, "name":"郴州市", "CityID":431000, "CitySort":430000},
+{"ProID":430000, "name":"常德市", "CityID":430700, "CitySort":430000},
+{"ProID":430000, "name":"岳阳市", "CityID":430600, "CitySort":430000},
+{"ProID":430000, "name":"益阳市", "CityID":430900, "CitySort":430000},
+{"ProID":430000, "name":"娄底市", "CityID":431300, "CitySort":430000},
+{"ProID":430000, "name":"衡阳市", "CityID":430400, "CitySort":430000},
+{"ProID":430000, "name":"长沙市", "CityID":430100, "CitySort":430000},
+{"ProID":440000, "name":"汕尾市", "CityID":441500, "CitySort":440000},
+{"ProID":440000, "name":"深圳市", "CityID":440300, "CitySort":440000},
+{"ProID":440000, "name":"佛山市", "CityID":440600, "CitySort":440000},
+{"ProID":440000, "name":"茂名市", "CityID":440900, "CitySort":440000},
+{"ProID":440000, "name":"河源市", "CityID":441600, "CitySort":440000},
+{"ProID":440000, "name":"湛江市", "CityID":440800, "CitySort":440000},
+{"ProID":440000, "name":"惠州市", "CityID":441300, "CitySort":440000},
+{"ProID":440000, "name":"揭阳市", "CityID":445200, "CitySort":440000},
+{"ProID":440000, "name":"广州市", "CityID":440100, "CitySort":440000},
+{"ProID":440000, "name":"清远市", "CityID":441800, "CitySort":440000},
+{"ProID":440000, "name":"潮州市", "CityID":445100, "CitySort":440000},
+{"ProID":440000, "name":"韶关市", "CityID":440200, "CitySort":440000},
+{"ProID":440000, "name":"江门市", "CityID":440700, "CitySort":440000},
+{"ProID":440000, "name":"中山市", "CityID":442000, "CitySort":440000},
+{"ProID":440000, "name":"云浮市", "CityID":445300, "CitySort":440000},
+{"ProID":440000, "name":"肇庆市", "CityID":441200, "CitySort":440000},
+{"ProID":440000, "name":"阳江市", "CityID":441700, "CitySort":440000},
+{"ProID":440000, "name":"珠海市", "CityID":440400, "CitySort":440000},
+{"ProID":440000, "name":"梅州市", "CityID":441400, "CitySort":440000},
+{"ProID":440000, "name":"东莞市", "CityID":441900, "CitySort":440000},
+{"ProID":440000, "name":"汕头市", "CityID":440500, "CitySort":440000},
+{"ProID":450000, "name":"贵港市", "CityID":450800, "CitySort":450000},
+{"ProID":450000, "name":"北海市", "CityID":450500, "CitySort":450000},
+{"ProID":450000, "name":"百色市", "CityID":451000, "CitySort":450000},
+{"ProID":450000, "name":"河池市", "CityID":451200, "CitySort":450000},
+{"ProID":450000, "name":"桂林市", "CityID":450300, "CitySort":450000},
+{"ProID":450000, "name":"柳州市", "CityID":450200, "CitySort":450000},
+{"ProID":450000, "name":"梧州市", "CityID":450400, "CitySort":450000},
+{"ProID":450000, "name":"南宁市", "CityID":450100, "CitySort":450000},
+{"ProID":450000, "name":"来宾市", "CityID":451300, "CitySort":450000},
+{"ProID":450000, "name":"崇左市", "CityID":451400, "CitySort":450000},
+{"ProID":450000, "name":"防城港市", "CityID":450600, "CitySort":450000},
+{"ProID":450000, "name":"玉林市", "CityID":450900, "CitySort":450000},
+{"ProID":450000, "name":"贺州市", "CityID":451100, "CitySort":450000},
+{"ProID":450000, "name":"钦州市", "CityID":450700, "CitySort":450000},
+{"ProID":460000, "name":"三亚市", "CityID":460200, "CitySort":460000},
+{"ProID":460000, "name":"万宁市", "CityID":469006, "CitySort":460000},
+{"ProID":460000, "name":"文昌市", "CityID":469005, "CitySort":460000},
+{"ProID":460000, "name":"保亭黎族苗族自治县", "CityID":469029, "CitySort":460000},
+{"ProID":460000, "name":"琼海市", "CityID":469002, "CitySort":460000},
+{"ProID":460000, "name":"五指山市", "CityID":469001, "CitySort":460000},
+{"ProID":460000, "name":"儋州市", "CityID":460400, "CitySort":460000},
+{"ProID":460000, "name":"琼中黎族苗族自治县", "CityID":469030, "CitySort":460000},
+{"ProID":460000, "name":"三沙市", "CityID":460300, "CitySort":460000},
+{"ProID":460000, "name":"定安县", "CityID":469021, "CitySort":460000},
+{"ProID":460000, "name":"屯昌县", "CityID":469022, "CitySort":460000},
+{"ProID":460000, "name":"澄迈县", "CityID":469023, "CitySort":460000},
+{"ProID":460000, "name":"临高县", "CityID":469024, "CitySort":460000},
+{"ProID":460000, "name":"海口市", "CityID":460100, "CitySort":460000},
+{"ProID":460000, "name":"白沙黎族自治县", "CityID":469025, "CitySort":460000},
+{"ProID":460000, "name":"东方市", "CityID":469007, "CitySort":460000},
+{"ProID":460000, "name":"昌江黎族自治县", "CityID":469026, "CitySort":460000},
+{"ProID":460000, "name":"乐东黎族自治县", "CityID":469027, "CitySort":460000},
+{"ProID":460000, "name":"陵水黎族自治县", "CityID":469028, "CitySort":460000},
+{"ProID":500000, "name":"重庆市市辖区", "CityID":500100, "CitySort":500000},
+{"ProID":500000, "name":"重庆市郊县", "CityID":500200, "CitySort":500000},
+{"ProID":510000, "name":"资阳市", "CityID":512000, "CitySort":510000},
+{"ProID":510000, "name":"巴中市", "CityID":511900, "CitySort":510000},
+{"ProID":510000, "name":"雅安市", "CityID":511800, "CitySort":510000},
+{"ProID":510000, "name":"德阳市", "CityID":510600, "CitySort":510000},
+{"ProID":510000, "name":"甘孜藏族自治州", "CityID":513300, "CitySort":510000},
+{"ProID":510000, "name":"南充市", "CityID":511300, "CitySort":510000},
+{"ProID":510000, "name":"成都市", "CityID":510100, "CitySort":510000},
+{"ProID":510000, "name":"达州市", "CityID":511700, "CitySort":510000},
+{"ProID":510000, "name":"眉山市", "CityID":511400, "CitySort":510000},
+{"ProID":510000, "name":"广元市", "CityID":510800, "CitySort":510000},
+{"ProID":510000, "name":"乐山市", "CityID":511100, "CitySort":510000},
+{"ProID":510000, "name":"绵阳市", "CityID":510700, "CitySort":510000},
+{"ProID":510000, "name":"宜宾市", "CityID":511500, "CitySort":510000},
+{"ProID":510000, "name":"阿坝藏族羌族自治州", "CityID":513200, "CitySort":510000},
+{"ProID":510000, "name":"遂宁市", "CityID":510900, "CitySort":510000},
+{"ProID":510000, "name":"广安市", "CityID":511600, "CitySort":510000},
+{"ProID":510000, "name":"自贡市", "CityID":510300, "CitySort":510000},
+{"ProID":510000, "name":"内江市", "CityID":511000, "CitySort":510000},
+{"ProID":510000, "name":"攀枝花市", "CityID":510400, "CitySort":510000},
+{"ProID":510000, "name":"凉山彝族自治州", "CityID":513400, "CitySort":510000},
+{"ProID":510000, "name":"泸州市", "CityID":510500, "CitySort":510000},
+{"ProID":520000, "name":"黔南布依族苗族自治州", "CityID":522700, "CitySort":520000},
+{"ProID":520000, "name":"毕节市", "CityID":520500, "CitySort":520000},
+{"ProID":520000, "name":"六盘水市", "CityID":520200, "CitySort":520000},
+{"ProID":520000, "name":"黔西南布依族苗族自治州", "CityID":522300, "CitySort":520000},
+{"ProID":520000, "name":"安顺市", "CityID":520400, "CitySort":520000},
+{"ProID":520000, "name":"遵义市", "CityID":520300, "CitySort":520000},
+{"ProID":520000, "name":"黔东南苗族侗族自治州", "CityID":522600, "CitySort":520000},
+{"ProID":520000, "name":"铜仁市", "CityID":520600, "CitySort":520000},
+{"ProID":520000, "name":"贵阳市", "CityID":520100, "CitySort":520000},
+{"ProID":530000, "name":"普洱市", "CityID":530800, "CitySort":530000},
+{"ProID":530000, "name":"红河哈尼族彝族自治州", "CityID":532500, "CitySort":530000},
+{"ProID":530000, "name":"文山壮族苗族自治州", "CityID":532600, "CitySort":530000},
+{"ProID":530000, "name":"临沧市", "CityID":530900, "CitySort":530000},
+{"ProID":530000, "name":"楚雄彝族自治州", "CityID":532300, "CitySort":530000},
+{"ProID":530000, "name":"曲靖市", "CityID":530300, "CitySort":530000},
+{"ProID":530000, "name":"昭通市", "CityID":530600, "CitySort":530000},
+{"ProID":530000, "name":"玉溪市", "CityID":530400, "CitySort":530000},
+{"ProID":530000, "name":"迪庆藏族自治州", "CityID":533400, "CitySort":530000},
+{"ProID":530000, "name":"大理白族自治州", "CityID":532900, "CitySort":530000},
+{"ProID":530000, "name":"保山市", "CityID":530500, "CitySort":530000},
+{"ProID":530000, "name":"西双版纳傣族自治州", "CityID":532800, "CitySort":530000},
+{"ProID":530000, "name":"德宏傣族景颇族自治州", "CityID":533100, "CitySort":530000},
+{"ProID":530000, "name":"昆明市", "CityID":530100, "CitySort":530000},
+{"ProID":530000, "name":"丽江市", "CityID":530700, "CitySort":530000},
+{"ProID":530000, "name":"怒江傈僳族自治州", "CityID":533300, "CitySort":530000},
+{"ProID":540000, "name":"那曲地区", "CityID":542400, "CitySort":540000},
+{"ProID":540000, "name":"昌都市", "CityID":540300, "CitySort":540000},
+{"ProID":540000, "name":"山南地区", "CityID":542200, "CitySort":540000},
+{"ProID":540000, "name":"日喀则市", "CityID":540200, "CitySort":540000},
+{"ProID":540000, "name":"拉萨市", "CityID":540100, "CitySort":540000},
+{"ProID":540000, "name":"阿里地区", "CityID":542500, "CitySort":540000},
+{"ProID":540000, "name":"林芝市", "CityID":540400, "CitySort":540000},
+{"ProID":610000, "name":"汉中市", "CityID":610700, "CitySort":610000},
+{"ProID":610000, "name":"咸阳市", "CityID":610400, "CitySort":610000},
+{"ProID":610000, "name":"榆林市", "CityID":610800, "CitySort":610000},
+{"ProID":610000, "name":"渭南市", "CityID":610500, "CitySort":610000},
+{"ProID":610000, "name":"西安市", "CityID":610100, "CitySort":610000},
+{"ProID":610000, "name":"商洛市", "CityID":611000, "CitySort":610000},
+{"ProID":610000, "name":"铜川市", "CityID":610200, "CitySort":610000},
+{"ProID":610000, "name":"宝鸡市", "CityID":610300, "CitySort":610000},
+{"ProID":610000, "name":"安康市", "CityID":610900, "CitySort":610000},
+{"ProID":610000, "name":"延安市", "CityID":610600, "CitySort":610000},
+{"ProID":620000, "name":"天水市", "CityID":620500, "CitySort":620000},
+{"ProID":620000, "name":"定西市", "CityID":621100, "CitySort":620000},
+{"ProID":620000, "name":"金昌市", "CityID":620300, "CitySort":620000},
+{"ProID":620000, "name":"临夏回族自治州", "CityID":622900, "CitySort":620000},
+{"ProID":620000, "name":"白银市", "CityID":620400, "CitySort":620000},
+{"ProID":620000, "name":"嘉峪关市", "CityID":620200, "CitySort":620000},
+{"ProID":620000, "name":"庆阳市", "CityID":621000, "CitySort":620000},
+{"ProID":620000, "name":"酒泉市", "CityID":620900, "CitySort":620000},
+{"ProID":620000, "name":"武威市", "CityID":620600, "CitySort":620000},
+{"ProID":620000, "name":"陇南市", "CityID":621200, "CitySort":620000},
+{"ProID":620000, "name":"张掖市", "CityID":620700, "CitySort":620000},
+{"ProID":620000, "name":"平凉市", "CityID":620800, "CitySort":620000},
+{"ProID":620000, "name":"兰州市", "CityID":620100, "CitySort":620000},
+{"ProID":620000, "name":"甘南藏族自治州", "CityID":623000, "CitySort":620000},
+{"ProID":630000, "name":"海北藏族自治州", "CityID":632200, "CitySort":630000},
+{"ProID":630000, "name":"海南藏族自治州", "CityID":632500, "CitySort":630000},
+{"ProID":630000, "name":"海东市", "CityID":630200, "CitySort":630000},
+{"ProID":630000, "name":"海西蒙古族藏族自治州", "CityID":632800, "CitySort":630000},
+{"ProID":630000, "name":"玉树藏族自治州", "CityID":632700, "CitySort":630000},
+{"ProID":630000, "name":"黄南藏族自治州", "CityID":632300, "CitySort":630000},
+{"ProID":630000, "name":"果洛藏族自治州", "CityID":632600, "CitySort":630000},
+{"ProID":630000, "name":"西宁市", "CityID":630100, "CitySort":630000},
+{"ProID":640000, "name":"吴忠市", "CityID":640300, "CitySort":640000},
+{"ProID":640000, "name":"固原市", "CityID":640400, "CitySort":640000},
+{"ProID":640000, "name":"中卫市", "CityID":640500, "CitySort":640000},
+{"ProID":640000, "name":"银川市", "CityID":640100, "CitySort":640000},
+{"ProID":640000, "name":"石嘴山市", "CityID":640200, "CitySort":640000},
+{"ProID":650000, "name":"石河子市", "CityID":659001, "CitySort":650000},
+{"ProID":650000, "name":"昌吉回族自治州", "CityID":652300, "CitySort":650000},
+{"ProID":650000, "name":"吐鲁番市", "CityID":650400, "CitySort":650000},
+{"ProID":650000, "name":"克孜勒苏柯尔克孜自治州", "CityID":653000, "CitySort":650000},
+{"ProID":650000, "name":"巴音郭楞蒙古自治州", "CityID":652800, "CitySort":650000},
+{"ProID":650000, "name":"喀什地区", "CityID":653100, "CitySort":650000},
+{"ProID":650000, "name":"可克达拉市", "CityID":659008, "CitySort":650000},
+{"ProID":650000, "name":"双河市", "CityID":659007, "CitySort":650000},
+{"ProID":650000, "name":"阿勒泰地区", "CityID":654300, "CitySort":650000},
+{"ProID":650000, "name":"铁门关市", "CityID":659006, "CitySort":650000},
+{"ProID":650000, "name":"北屯市", "CityID":659005, "CitySort":650000},
+{"ProID":650000, "name":"伊犁哈萨克自治州", "CityID":654000, "CitySort":650000},
+{"ProID":650000, "name":"五家渠市", "CityID":659004, "CitySort":650000},
+{"ProID":650000, "name":"图木舒克市", "CityID":659003, "CitySort":650000},
+{"ProID":650000, "name":"阿拉尔市", "CityID":659002, "CitySort":650000},
+{"ProID":650000, "name":"和田地区", "CityID":653200, "CitySort":650000},
+{"ProID":650000, "name":"塔城地区", "CityID":654200, "CitySort":650000},
+{"ProID":650000, "name":"哈密地区", "CityID":652200, "CitySort":650000},
+{"ProID":650000, "name":"博尔塔拉蒙古自治州", "CityID":652700, "CitySort":650000},
+{"ProID":650000, "name":"阿克苏地区", "CityID":652900, "CitySort":650000},
+{"ProID":650000, "name":"乌鲁木齐市", "CityID":650100, "CitySort":650000},
+{"ProID":650000, "name":"克拉玛依市", "CityID":650200, "CitySort":650000}]
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/assets/gift.json b/JQ_ELOVE/src/main/assets/gift.json
new file mode 100644
index 0000000000000000000000000000000000000000..84b45fba3f1222d8c725a3918252fa9b2d00ca37
--- /dev/null
+++ b/JQ_ELOVE/src/main/assets/gift.json
@@ -0,0 +1,6 @@
+[{"name":":qiyuan01:","name_real":"臭鸡蛋","redbean":2,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan02:","name_real":"飞吻","redbean":2,"pic":"R.drawable.lw_fw"},{"name":":qiyuan03:","name_real":"赞","redbean":2,"pic":"R.drawable.lw_dz"},
+{"name":":qiyuan04:","name_real":"1朵玫瑰","redbean":5,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan05:","name_real":"棒棒糖","redbean":5,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan06:","name_real":"啤酒","redbean":5,"pic":"R.drawable.lw_cjd"},
+{"name":":qiyuan07:","name_real":"爱神","redbean":10,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan08:","name_real":"蛋糕","redbean":10,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan09:","name_real":"3朵玫瑰","redbean":10,"pic":"R.drawable.lw_cjd"},
+{"name":":qiyuan10:","name_real":"巧克力","redbean":10,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan11:","name_real":"单身狗","redbean":10,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan12:","name_real":"口红","redbean":20,"pic":"R.drawable.lw_cjd"},
+{"name":":qiyuan13:","name_real":"99朵玫瑰","redbean":60,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan14:","name_real":"戒指","redbean":60,"pic":"R.drawable.lw_cjd"},{"name":":qiyuan15:","name_real":"飞机","redbean":100,"pic":"R.drawable.lw_cjd"},
+{"name":":qiyuan16:","name_real":"游艇","redbean":100,"pic":"R.drawable.lw_cjd"}]
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/assets/province.json b/JQ_ELOVE/src/main/assets/province.json
new file mode 100644
index 0000000000000000000000000000000000000000..d0ddbd8d7f33a03e3ee57d00efd96ecf204ce0aa
--- /dev/null
+++ b/JQ_ELOVE/src/main/assets/province.json
@@ -0,0 +1,33 @@
+[
+{"ProID":110000, "name":"北京市"},
+{"ProID":120000, "name":"天津市"},
+{"ProID":130000, "name":"河北省"},
+{"ProID":140000, "name":"山西省"},
+{"ProID":150000, "name":"内蒙古自治区"},
+{"ProID":210000, "name":"辽宁省"},
+{"ProID":220000, "name":"吉林省"},
+{"ProID":230000, "name":"黑龙江省"},
+{"ProID":310000, "name":"上海市"},
+{"ProID":320000, "name":"江苏省"},
+{"ProID":330000, "name":"浙江省"},
+{"ProID":340000, "name":"安徽省"},
+{"ProID":350000, "name":"福建省"},
+{"ProID":360000, "name":"江西省"},
+{"ProID":370000, "name":"山东省"},
+{"ProID":410000, "name":"河南省"},
+{"ProID":420000, "name":"湖北省"},
+{"ProID":430000, "name":"湖南省"},
+{"ProID":440000, "name":"广东省"},
+{"ProID":450000, "name":"广西壮族自治区"},
+{"ProID":460000, "name":"海南省"},
+{"ProID":500000, "name":"重庆市"},
+{"ProID":510000, "name":"四川省"},
+{"ProID":520000, "name":"贵州省"},
+{"ProID":530000, "name":"云南省"},
+{"ProID":540000, "name":"西藏自治区"},
+{"ProID":610000, "name":"陕西省"},
+{"ProID":620000, "name":"甘肃省"},
+{"ProID":630000, "name":"青海省"},
+{"ProID":640000, "name":"宁夏回族自治区"},
+{"ProID":650000, "name":"新疆维吾尔自治区"}
+]
diff --git a/JQ_ELOVE/src/main/assets/school.json b/JQ_ELOVE/src/main/assets/school.json
new file mode 100644
index 0000000000000000000000000000000000000000..b735b31c1a02a864db9487a28bb7ccb8bdb58452
--- /dev/null
+++ b/JQ_ELOVE/src/main/assets/school.json
@@ -0,0 +1,35 @@
+[{"id":"00","data":["合肥工业大学","中国科学技术大学","安徽大学","安徽理工大学","安徽工业大学","安徽工程大学","安徽农业大学","安徽医科大学","安徽师范大学","淮北师范大学","安徽财经大学","安徽三联学院","安徽建筑工业学院","安徽文达信息工程学院","安徽中医学院","皖南医学院","蚌埠医学院","淮南师范学院","安徽科技学院","阜阳师范学院","安庆师范学院","合肥师范学院","安徽外国语学院","滁州学院","池州学院","皖西学院","宿州学院","黄山学院","巢湖学院","蚌埠学院","铜陵学院","安徽新华学院","合肥学院","安徽医学高等专科学校","安徽中医药高等专科学校","安庆医药高等专科学校","合肥幼儿师范高等专科学校","亳州师范高等专科学校","桐城师范高等专科学校","马鞍山师范高等专科学校","安徽汽车职业技术学院","皖西卫生职业学院","安徽职业技术学院","芜湖职业技术学院","安徽水利水电职业技术学院","淮北职业技术学院","安徽警官职业学院","安徽商贸职业技术学院","淮南职业技术学院","淮南联合大学","民办万博科技职业学院","铜陵职业技术学院","安徽财贸职业学院","安徽国际商务职业学院","马鞍山职业技术学院","安徽人口职业学院","安徽新闻出版职业技术学院","安徽城市管理职业学院","安徽林业职业技术学院","徽商职业学院","滁州职业技术学院","民办安徽旅游职业学院","安徽邮电职业技术学院","安庆职业技术学院","安徽广播影视职业技术学院","安徽涉外经济职业学院","安徽公安职业学院","安徽审计职业学院","宣城职业技术学院","亳州职业技术学院","安徽中澳科技职业学院","安徽工业职业技术学院","安徽机电职业技术学院","安徽绿海商务职业学院","合肥共达职业技术学院","合肥科技职业学院","蚌埠经济技术职业学院","合肥职业技术学院","阜阳科技职业学院","池州职业技术学院","安徽矿业职业技术学院","安徽黄梅戏艺术职业学院","六安职业技术学院","民办合肥滨湖职业技术学院","合肥通用职业技术学院","安徽体育运动职业技术学院","安徽粮食工程职业学院","合肥信息技术职业学院","安徽艺术职业学院","民办合肥经济技术职业学院","安徽国防科技职业学院","安徽工商职业学院","宿州职业技术学院","安徽冶金科技职业学院","阜阳职业技术学院","安徽工业经济职业技术学院","安徽电子信息职业技术学院","安徽交通职业技术学院","安徽电气工程职业技术学院","安徽工贸职业技术学院","安徽长江职业学院","安徽扬子职业技术学院","安徽现代信息工程职业学院","民办合肥财经职业学院","芜湖信息技术职业学院","黄山职业技术学院","滁州城市职业学院"]},
+ {"id":"01","data":["澳门高等校际学院","澳门理工学院","澳门科技大学","联合国大学-国际软件技术研究所","澳门大学"]},
+ {"id":"02","data":["北京大学","中国人民大学","清华大学","北京交通大学","北京科技大学","中国石油大学(北京)","中国矿业大学(北京)","中国地质大学(北京)","北京邮电大学","华北电力大学(北京)","北京化工大学","中国农业大学","北京林业大学","北京中医药大学","北京师范大学","北京外国语大学","北京语言大学","对外经济贸易大学","中央财经大学","中国政法大学","中央民族大学","中国人民公安大学","北京协和医学院","北京体育大学","北京理工大学","北京航空航天大学","北京信息科技大学","北京工商大学","北京联合大学","北京工业大学","北方工业大学","首都医科大学","首都师范大学","首都经济贸易大学","中国传媒大学","国际关系学院","中央戏剧学院","中央美术学院","中央音乐学院","北京电子科技学院","外交学院","中国劳动关系学院","中国青年政治学院","中华女子学院","北京服装学院","北京建筑工程学院","北京印刷学院","首钢工学院","北京石油化工学院","北京农学院","首都体育学院","北京第二外国语学院","北京物资学院","北京警察学院","中国音乐学院","中国戏曲学院","北京电影学院","北京舞蹈学院","北京城市学院","北京青年政治学院","北京交通运输职业学院","北京信息职业技术学院","北京科技经营管理学院","北京电子科技职业学院","北京工业职业技术学院","北京科技职业学院","北京戏曲艺术职业学院","北京农业职业学院","北京汇佳职业学院","北京财贸职业学院","北京经济技术职业学院","北京北大方正软件职业技术学院","北京交通职业技术学院","北京培黎职业学院","北京吉利大学","北京经济管理职业学院","北京卫生职业学院","北京政法职业学院","北京体育职业学院","北京社会管理职业学院","北京新圆明职业学院","北京现代职业技术学院","北京京北职业技术学院","北京经贸职业学院","北京劳动保障职业学院","清华大学五道口金融学院","财政部财政科学研究所","中国科学院","中国农业科学院","中国社会科学院研究生院"]},
+ {"id":"03","data":["重庆大学","西南大学","重庆交通大学","重庆邮电大学","重庆理工大学","重庆医科大学","重庆师范大学","重庆工商大学","西南政法大学","重庆科技学院","长江师范学院","重庆第二师范学院","四川外语学院","重庆警察学院","四川美术学院","重庆三峡学院","重庆文理学院","重庆电力高等专科学校","重庆三峡医药高等专科学校","重庆医药高等专科学校","重庆化工职业学院","重庆工业职业技术学院","重庆正大软件职业技术学院","重庆城市管理职业学院","重庆公共运输职业学院","重庆安全技术职业学院","重庆三峡职业学院","重庆工贸职业技术学院","重庆民生职业技术学院","重庆轻工职业学院","重庆机电职业技术学院","重庆电信职业学院","重庆电子工程职业学院","重庆城市职业学院","重庆水利电力职业技术学院","重庆商务职业学院","重庆电讯职业学院","重庆能源职业学院","重庆传媒职业学院","重庆工商职业学院","重庆经贸职业学院","重庆建筑工程职业学院","重庆青年职业技术学院","重庆财经职业学院","重庆科创职业学院","重庆房地产职业学院","重庆海联职业技术学院","重庆信息技术职业学院","重庆航天职业技术学院","重庆工程职业技术学院","重庆艺术工程职业学院","重庆旅游职业学院","重庆交通职业学院"]},
+ {"id":"04","data":["厦门大学","华侨大学","福建农林大学","集美大学","福州大学","仰恩大学","福建医科大学","福建中医药大学","福建师范大学","厦门理工学院","闽南理工学院","福建工程学院","宁德师范学院","泉州师范学院","漳州师范学院","福州外语外贸学院","福建警察学院","闽江学院","三明学院","龙岩学院","莆田学院","武夷学院","福建江夏学院","厦门医学高等专科学校","泉州医学高等专科学校","福建幼儿师范高等专科学校","泉州幼儿师范高等专科学校","福建商业高等专科学校","福州英华职业学院","福建船政交通职业学院","厦门华厦职业学院","泉州纺织服装职业学院","漳州职业技术学院","黎明职业大学","福建华南女子职业学院","闽西职业技术学院","福州黎明职业技术学院","厦门东海职业技术学院","漳州卫生职业学院","福州职业技术学院","福州海峡职业技术学院","泉州理工职业学院","福建警官职业学院","闽北职业技术学院","泉州华光摄影艺术职业学院","福建林业职业技术学院","泉州经贸职业技术学院","福建卫生职业技术学院","厦门华天涉外职业技术学院","漳州理工职业学院","厦门兴才职业技术学院","泉州信息职业技术学院","湄洲湾职业技术学院","福州软件职业技术学院","福州科技职业技术学院","福建艺术职业学院","福建生物工程职业技术学院","德化陶瓷职业技术学院","福建体育职业技术学院","宁德职业技术学院","厦门软件职业技术学院","三明职业技术学院","福建对外经济贸易职业技术学院","厦门海洋职业技术学院","福建农业职业技术学院","福建信息职业技术学院","厦门演艺职业学院","武夷山职业学院","福建电力职业技术学院","漳州科技职业学院","厦门城市职业学院","厦门南洋职业学院","漳州城市职业学院","福建水利电力职业技术学院","泉州轻工职业学院","泉州泰山航海职业学院","厦门安防科技职业学院"]},
+ {"id":"05","data":["兰州大学","西北民族大学","兰州理工大学","兰州交通大学","甘肃农业大学","西北师范大学","兰州工业学院","甘肃中医学院","陇东学院","甘肃民族师范学院","天水师范学院","兰州商学院","甘肃政法学院","河西学院","兰州城市学院","平凉医学高等专科学校","张掖医学高等专科学校","陇南师范高等专科学校","定西师范高等专科学校","甘肃机电职业技术学院","甘肃联合大学","兰州石化职业技术学院","兰州资源环境职业技术学院","甘肃畜牧工程职业技术学院","甘肃农业职业技术学院","甘肃警察职业学院","甘肃交通职业技术学院","武威职业学院","甘肃有色冶金职业技术学院","白银矿冶职业技术学院","甘肃钢铁职业技术学院","甘肃工业职业技术学院","兰州职业技术学院","酒泉职业技术学院","甘肃建筑职业技术学院","甘肃林业职业技术学院","兰州外语职业学院"]},
+ {"id":"06","data":["中山大学","华南理工大学","暨南大学","汕头大学","深圳大学","五邑大学","广东工业大学","南方科技大学","华南农业大学","广东海洋大学","广州中医药大学","南方医科大学","华南师范大学","广东外语外贸大学","广州大学","北京师范大学-香港浸会大学联合国际学院","广东石油化工学院","肇庆学院","东莞理工学院","广东科技学院","仲恺农业工程学院","广东医学院","广州医学院","广东药学院","韶关学院","湛江师范学院","嘉应学院","韩山师范学院","惠州学院","广东第二师范学院","广东商学院","广东金融学院","广东警官学院","广州体育学院","广州美术学院","星海音乐学院","广东技术师范学院","广东培正学院","佛山科学技术学院","广东白云学院","广州航海高等专科学校","肇庆医学高等专科学校","私立华联学院","民办南华工商学院","广州民航职业技术学院","广东食品药品职业学院","广东松山职业技术学院","深圳职业技术学院","潮汕职业技术学院","顺德职业技术学院","广东新安职业技术学院","广东农工商职业技术学院","广东交通职业技术学院","广东水利电力职业技术学院","广东轻工职业技术学院","佛山职业技术学院","广州珠江职业技术学院","广州现代信息工程职业技术学院","广东亚视演艺职业学院","清远职业技术学院","汕头职业技术学院","广东邮电职业技术学院","揭阳职业技术学院","广州南洋理工职业学院","广州科技职业技术学院","广东科贸职业学院","深圳信息职业技术学院","中山职业技术学院","广东司法警官职业学院","广州松田职业学院","广东省外语艺术职业学院","广东文理职业学院","广州番禺职业技术学院","广州铁路职业技术学院","广州华南商贸职业学院","广州华立科技职业学院","广州城市职业学院","广东工程职业技术学院","广州科技贸易职业学院","肇庆工商职业技术学院","广东体育职业技术学院","广东行政职业学院","广东文艺职业学院","广州体育职业技术学院","广东科学技术职业学院","中山火炬职业技术学院","江门职业技术学院","茂名职业技术学院","广州工程技术职业学院","广州涉外经济职业技术学院","惠州经济职业技术学院","广州城建职业学院","肇庆科技职业技术学院","珠海艺术职业学院","南海东软信息技术职业学院","广州康大职业技术学院","广州工商职业技术学院","广东青年职业学院","广州东华职业学院","广东创新科技职业学院","广东工贸职业技术学院","珠海城市职业技术学院","汕尾职业技术学院","广东财经职业学院","广东职业技术学院","罗定职业技术学院","河源职业技术学院","广东岭南职业技术学院","广东女子职业技术学院","广东建设职业技术学院","广东机电职业技术学院","广东理工职业学院","惠州卫生职业技术学院","阳江职业技术学院","广东舞蹈戏剧职业学院","广东南方职业学院","广州华商职业学院","广州华夏职业学院","广东环境保护工程职业学院","广东信息工程职业学院","东莞职业技术学院"]},
+ {"id":"07","data":["广西大学","桂林电子科技大学","桂林理工大学","广西医科大学","广西中医药大学","广西师范大学","广西民族大学","桂林航天工业学院","广西工学院","桂林医学院","右江民族医学院","广西师范学院","广西民族师范学院","河池学院","玉林师范学院","广西外国语学院","广西财经学院","广西艺术学院","百色学院","贺州学院","钦州学院","梧州学院","柳州医学高等专科学校","柳州师范高等专科学校","桂林师范高等专科学校","广西幼儿师范高等专科学校","桂林旅游高等专科学校","广西警官高等专科学校","广西体育高等专科学校","广西科技职业学院","广西卫生职业技术学院","广西机电职业技术学院","广西职业技术学院","柳州职业技术学院","南宁职业技术学院","广西国际商务职业技术学院","广西经贸职业技术学院","北海职业学院","北海艺术设计职业学院","广西现代职业技术学院","桂林山水职业学院","广西演艺职业学院","广西工业职业技术学院","广西电力职业技术学院","广西经济职业学院","广西生态工程职业技术学院","贵港职业学院","广西城市职业学院","广西工商职业技术学院","百色职业学院","广西农业职业技术学院","广西工程职业学院","柳州铁道职业技术学院","广西理工职业技术学院","梧州职业学院","广西英华国际职业学院","广西建设职业技术学院","广西水利电力职业技术学院","广西交通职业技术学院","柳州城市职业学院","邕江大学"]},
+ {"id":"08","data":["贵州大学","贵州师范大学","贵州财经大学","贵州民族大学","贵阳医学院","遵义医学院","贵阳中医学院","毕节学院","遵义师范学院","黔南民族师范学院","六盘水师范学院","兴义民族师范学院","贵州师范学院","安顺学院","贵阳学院","凯里学院","铜仁学院","黔南民族医学高等专科学校","遵义医药高等专科学校","贵州商业高等专科学校","贵州航天职业技术学院","贵州电子信息职业技术学院","贵州交通职业技术学院","贵州警官职业学院","遵义职业技术学院","贵阳护理职业学院","贵州工业职业技术学院","贵州盛华职业学院","黔东南民族职业技术学院","安顺职业技术学院","贵州职业技术学院","毕节职业技术学院","贵州电力职业技术学院","贵州工商职业学院","黔南民族职业技术学院","铜仁职业技术学院","贵州亚泰职业学院","贵州轻工职业技术学院","贵阳职业技术学院","六盘水职业技术学院","黔西南民族职业技术学院"]},
+ {"id":"09","data":["海南大学","海南师范大学","海口经济学院","海南医学院","海南热带海洋学院","三亚学院","琼台师范高等专科学校","海南职业技术学院","三亚城市职业学院","海南科技职业学院","三亚航空旅游职业学院","海南软件职业技术学院","海南经贸职业技术学院","海南工商职业学院","三亚理工职业学院","海南政法职业学院","海南外国语职业学院"]},
+ {"id":"10","data":["河北大学","河北工业大学","华北电力大学(保定)","燕山大学","河北联合大学","河北科技大学","石家庄铁道大学","河北工程大学","河北农业大学","河北医科大学","河北师范大学","河北经贸大学","中国人民武装警察部队学院","中央司法警官学院","防灾科技学院","华北科技学院","北华航天工业学院","河北建筑工程学院","石家庄经济学院","河北科技学院","承德医学院","唐山师范学院","廊坊师范学院","沧州师范学院","河北民族师范学院","邢台学院","河北科技师范学院","河北外国语学院","河北金融学院","河北体育学院","河北传媒学院","河北美术学院","邯郸学院","衡水学院","石家庄学院","保定学院","唐山学院","河北北方学院","承德石油高等专科学校","河北工程技术高等专科学校","石家庄人民医学高等专科学校","邢台医学高等专科学校","石家庄医学高等专科学校","沧州医学高等专科学校","石家庄幼儿师范高等专科学校","承德护理职业学院","河北化工医药职业技术学院","邯郸职业技术学院","张家口职业技术学院","沧州职业技术学院","保定职业技术学院","石家庄铁路职业技术学院","河北能源职业技术学院","石家庄职业技术学院","邢台职业技术学院","河北工业职业技术学院","石家庄科技职业学院","河北劳动关系职业学院","唐山职业技术学院","渤海石油职业学院","石家庄科技工程职业学院","石家庄邮电职业技术学院","河北司法警官职业学院","冀中职业学院","石家庄工商职业学院","石家庄经济职业学院","石家庄城市职业学院","石家庄工程职业学院","河北省艺术职业学院","河北旅游职业学院","河北女子职业技术学院","廊坊职业技术学院","保定电力职业技术学院","河北机电职业技术学院","石家庄科技信息职业学院","河北公安警察职业学院","石家庄外国语职业学院","河北建材职业技术学院","河北政法职业学院","河北石油职业技术学院","唐山工业职业技术学院","衡水职业技术学院","秦皇岛职业技术学院","唐山科技职业技术学院","泊头职业学院","河北轨道运输职业技术学院","宣化科技职业学院","廊坊东方职业技术学院","廊坊卫生职业学院","河北软件职业技术学院","石家庄理工职业学院","石家庄信息工程职业学院","河北交通职业技术学院","石家庄财经职业学院","河北外国语职业学院","廊坊燕京职业技术学院"]},
+ {"id":"11","data":["郑州大学","河南大学","河南科技大学","河南理工大学","河南工业大学","河南农业大学","河南师范大学","河南财经政法大学","郑州华信学院","郑州科技学院","华北水利水电学院","郑州轻工业学院","中原工学院","郑州航空工业管理学院","河南城建学院","安阳工学院","南阳理工学院","黄河科技学院","河南工程学院","商丘工学院","洛阳理工学院","河南中医学院","新乡医学院","信阳师范学院","周口师范学院","商丘师范学院","安阳师范学院","南阳师范学院","洛阳师范学院","郑州师范学院","郑州升达经贸管理学院","郑州成功财经学院","河南警察学院","河南科技学院","新乡学院","平顶山学院","黄淮学院","许昌学院","商丘学院","铁道警官高等专科学校","郑州电力高等专科学校","河南机电高等专科学校","郑州牧业工程高等专科学校","信阳农业高等专科学校","南阳医学高等专科学校","商丘医学高等专科学校","漯河医学高等专科学校","郑州澍青医学高等专科学校","安阳幼儿师范高等专科学校","郑州幼儿师范高等专科学校","焦作师范高等专科学校","河南财政税务高等专科学校","河南商业高等专科学校","焦作工贸职业学院","河南化工职业学院","郑州理工职业学院","郑州信息工程职业学院","河南艺术职业学院","开封文化艺术职业学院","三门峡职业技术学院","郑州铁路职业技术学院","黄河水利职业技术学院","漯河职业技术学院","开封大学","河南职业技术学院","中州大学","焦作大学","许昌职业技术学院","郑州信息科技职业学院","郑州经贸职业学院","河南工业职业技术学院","河南司法警官职业学院","周口职业技术学院","鹤壁职业技术学院","平顶山工业职业技术学院","商丘职业技术学院","濮阳职业技术学院","嵩山少林武术职业学院","许昌电气职业学院","河南护理职业学院","河南机电职业学院","郑州电力职业技术学院","安阳职业技术学院","信阳涉外职业技术学院","郑州电子信息职业技术学院","洛阳职业技术学院","郑州工业安全职业学院","永城职业学院","郑州旅游职业学院","郑州职业技术学院","信阳职业技术学院","郑州商贸旅游职业学院","新乡职业技术学院","驻马店职业技术学院","河南经贸职业学院","河南交通职业技术学院","河南农业职业学院","南阳职业学院","济源职业技术学院","周口科技职业学院","河南推拿职业学院","郑州城市职业学院","河南检察职业学院","河南工业贸易职业学院","郑州黄河护理职业学院","河南质量工程职业学院","漯河食品职业学院","郑州交通职业学院","河南建筑职业技术学院","鹤壁汽车工程职业学院","许昌陶瓷职业学院","长垣烹饪职业技术学院"]},
+ {"id":"12","data":["东北林业大学","哈尔滨工业大学","哈尔滨工程大学","黑龙江大学","佳木斯大学","齐齐哈尔大学","哈尔滨理工大学","东北石油大学","东北农业大学","黑龙江八一农垦大学","哈尔滨医科大学","黑龙江中医药大学","哈尔滨师范大学","哈尔滨商业大学","哈尔滨学院","黑龙江工程学院","齐齐哈尔工程学院","黑龙江科技学院","哈尔滨远东理工学院","哈尔滨石油学院","齐齐哈尔医学院","牡丹江医学院","牡丹江师范学院","大庆师范学院","黑龙江外国语学院","哈尔滨金融学院","哈尔滨德强商务学院","哈尔滨体育学院","黑龙江东方学院","绥化学院","哈尔滨剑桥学院","哈尔滨广厦学院","黑河学院","哈尔滨华德学院","黑龙江护理高等专科学校","大庆医学高等专科学校","齐齐哈尔高等师范专科学校","黑龙江幼儿师范高等专科学校","鹤岗师范高等专科学校","鸡西大学","黑龙江司法警官职业学院","黑龙江建筑职业技术学院","牡丹江大学","伊春职业学院","黑龙江农垦职业学院","黑龙江农业职业技术学院","黑龙江林业职业技术学院","黑龙江农业工程职业学院","大庆职业学院","黑龙江农业经济职业学院","黑龙江旅游职业技术学院","大兴安岭职业学院","黑龙江职业学院","哈尔滨现代公共关系职业学院","黑龙江三江美术职业学院","黑龙江煤炭职业技术学院","黑龙江信息技术职业学院","黑龙江生态工程职业学院","七台河职业学院","黑龙江艺术职业学院","哈尔滨华夏计算机职业技术学院","黑龙江生物科技职业学院","黑龙江公安警官职业学院","黑龙江农垦科技职业学院","黑龙江商业职业学院","哈尔滨科学技术职业学院","黑龙江民族职业学院","哈尔滨铁道职业技术学院","黑龙江粮食职业学院","哈尔滨江南职业技术学院","哈尔滨应用职业技术学院","黑龙江交通职业技术学院","佳木斯职业学院","齐齐哈尔理工职业学院","哈尔滨工程技术职业学院","哈尔滨职业技术学院","哈尔滨电力职业技术学院"]},
+ {"id":"13","data":["武汉大学","中南财经政法大学","华中科技大学","武汉理工大学","中国地质大学(武汉)","华中农业大学","华中师范大学","中南民族大学","湖北大学","长江大学","江汉大学","三峡大学","武汉科技大学","湖北工业大学","武汉工程大学","武汉纺织大学","湖北中医药大学","荆楚理工学院","武汉工业学院","湖北汽车工业学院","武昌工学院","武昌理工学院","湖北医药学院","湖北师范学院","黄冈师范学院","湖北工程学院","湖北第二师范学院","湖北经济学院","武汉长江工商学院","湖北警官学院","武汉体育学院","湖北美术学院","武汉音乐学院","湖北民族学院","湖北科技学院","湖北理工学院","湖北文理学院","武汉生物工程学院","汉口学院","武汉东湖学院","湖北中医药高等专科学校","郧阳师范高等专科学校","武汉工贸职业学院","鄂州职业大学","荆州理工职业学院","武汉商业服务学院","恩施职业技术学院","襄阳职业技术学院","湖北职业技术学院","十堰职业技术学院","长江职业学院","武汉职业技术学院","武汉船舶职业技术学院","黄冈职业技术学院","武汉信息传播职业技术学院","湖北财税职业学院","武汉城市职业学院","湖北国土资源职业学院","咸宁职业技术学院","鄂东职业技术学院","黄冈科技职业学院","湖北艺术职业学院","三峡旅游职业技术学院","江汉艺术职业学院","湖北生态工程职业技术学院","长江工程职业技术学院","湖北生物科技职业学院","天门职业学院","随州职业技术学院","武汉警官职业学院","湖北开放职业学院","武汉科技职业学院","武汉交通职业学院","武汉商贸职业学院","武汉外语外事职业学院","湖北水利水电职业技术学院","湖北城市建设职业技术学院","武昌职业学院","湖北三峡职业技术学院","武汉民政职业学院","湖北体育职业学院","襄阳汽车职业技术学院","武汉航海职业技术学院","三峡电力职业学院","武汉铁路职业技术学院","湖北科技职业学院","湖北青年职业学院","黄石职业技术学院","武汉工业职业技术学院","武汉电力职业技术学院","仙桃职业学院","武汉工程职业技术学院","荆州职业技术学院","武汉软件工程职业学院","湖北轻工职业技术学院","湖北交通职业技术学院"]},
+ {"id":"14","data":["国防科学技术大学","中南大学","湖南大学","湘潭大学","湖南科技大学","吉首大学","长沙理工大学","南华大学","湖南工业大学","湖南农业大学","湖南中医药大学","湖南师范大学","长沙学院","湖南第一师范学院","湖南工学院","湖南理工学院","湖南城市学院","湖南工程学院","中南林业科技大学","长沙医学院","衡阳师范学院","湘南学院","湖南涉外经济学院","湖南财政经济学院","湖南商学院","湖南警察学院","湖南女子学院","湖南科技学院","湖南人文科技学院","湖南文理学院","邵阳学院","怀化学院","怀化医学高等专科学校","邵阳医学高等专科学校","益阳医学高等专科学校","湖南中医药高等专科学校","株洲师范高等专科学校","长沙师范学校","湖南税务高等专科学校","长沙航空职业技术学院","湖南冶金职业技术学院","湖南信息职业技术学院","湖南大众传媒职业技术学院","湖南工业职业技术学院","湖南环境生物职业技术学院","湖南铁道职业技术学院","长沙民政职业技术学院","永州职业技术学院","湖南外国语职业学院","湖南电子科技职业学院","湖南都市职业学院","湖南科技经贸职业学院","湖南软件职业学院","湖南信息科学职业学院","湘西民族职业技术学院","衡阳财经工业职业技术学院","益阳职业技术学院","湖南同德职业学院","湖南体育职业学院","湖南艺术职业学院","湖南司法警官职业学院","湖南工程职业技术学院","湖南工艺美术职业学院","湖南电气职业技术学院","湖南民族职业学院","湖南外贸职业学院","邵阳职业技术学院","湖南吉利汽车职业技术学院","湖南水利水电职业技术学院","长沙商贸旅游职业技术学院","湖南科技工业职业技术学院","湖南有色金属职业技术学院","湖南食品药品职业学院","长沙卫生职业学院","湖南网络工程职业学院","长沙环境保护职业技术学院","张家界航空工业职业技术学院","长沙电力职业技术学院","株洲职业技术学院","湖南石油化工职业技术学院","湖南城建职业技术学院","湖南化工职业技术学院","潇湘职业学院","长沙职业技术学院","怀化职业技术学院","岳阳职业技术学院","常德职业技术学院","湖南交通职业技术学院","娄底职业技术学院","湖南理工职业技术学院","长沙通信职业技术学院","湖南九嶷职业技术学院","湘潭职业技术学院","湖南商务职业技术学院","郴州职业技术学院","湖南生物机电职业技术学院","保险职业学院","湖南科技职业学院","湖南现代物流职业技术学院","湖南安全技术职业学院","湖南高速铁路职业技术学院","湖南机电职业技术学院","湖南铁路科技职业技术学院","湖南三一工业职业技术学院","长沙南方职业学院","湖南高尔夫旅游职业学院","湖南工商职业学院"]},
+ {"id":"15","data":["吉林大学","东北师范大学","延边大学","北华大学","长春大学","长春理工大学","长春工业大学","吉林农业大学","长春中医药大学","吉林师范大学","吉林财经大学","东北电力大学","长春工程学院","吉林建筑工程学院","吉林化工学院","长春建筑学院","吉林农业科技学院","吉林医药学院","通化师范学院","白城师范学院","吉林工程技术师范学院","长春师范学院","吉林华桥外国语学院","吉林工商学院","吉林警察学院","吉林体育学院","吉林艺术学院","吉林动画学院","长春汽车工业高等专科学校","长春医学高等专科学校","白城医学高等专科学校","长春金融高等专科学校","吉林科技职业技术学院","四平职业大学","辽源职业技术学院","长春东方职业学院","吉林交通职业技术学院","吉林铁道职业技术学院","吉林司法警官职业学院","白城职业技术学院","吉林工业职业技术学院","吉林电子信息职业技术学院","长白山职业技术学院","松原职业技术学院","长春信息技术职业学院","延边职业技术学院","长春职业技术学院","吉林农业工程职业技术学院","吉林城市职业技术学院"]},
+ {"id":"16","data":["南京大学","东南大学","中国矿业大学(徐州)","河海大学","江南大学","南京农业大学","中国药科大学","南京理工大学","南京航空航天大学","苏州大学","扬州大学","江苏大学","江苏科技大学","南京邮电大学","南京工业大学","常州大学","南京林业大学","南京医科大学","南京中医药大学","南京师范大学","江苏师范大学","南京财经大学","南通大学","西交利物浦大学","南京森林警察学院","南京信息工程大学","金陵科技学院","徐州工程学院","盐城工学院","淮阴工学院","常州工学院","南京工程学院","淮海工学院","徐州医学院","盐城师范学院","南京晓庄学院","苏州科技学院","江苏技术师范学院","淮阴师范学院","南京审计学院","江苏警官学院","南京体育学院","南京艺术学院","常熟理工学院","三江学院","无锡太湖学院","连云港师范高等专科学校","泰州师范高等专科学校","徐州幼儿师范高等专科学校","镇江市高等专科学校","江苏畜牧兽医职业技术学院","无锡职业技术学院","南通纺织职业技术学院","苏州工艺美术职业技术学院","南京工业职业技术学院","无锡商业职业技术学院","泰州职业技术学院","南通职业大学","连云港职业技术学院","民办明达职业技术学院","苏州职业大学","江苏城市职业学院","沙洲职业工学院","扬州市职业大学","江苏建筑职业技术学院","南通航运职业技术学院","宿迁职业技术学院","江苏信息职业技术学院","江苏农林职业技术学院","江苏食品职业技术学院","徐州工业职业技术学院","常州机电职业技术学院","常州轻工职业技术学院","南京旅游职业学院","常州工程职业技术学院","南京信息职业技术学院","苏州高博软件技术职业学院","盐城卫生职业技术学院","苏州工业职业技术学院","江阴职业技术学院","南京城市职业学院","徐州生物工程职业技术学院","苏州信息职业技术学院","南京机电职业技术学院","江苏建康职业学院","苏州卫生职业技术学院","江苏海事职业技术学院","苏州经贸职业技术学院","江苏经贸职业技术学院","南京特殊教育职业技术学院","扬州环境资源职业技术学院","金肯职业技术学院","应天职业技术学院","南京化工职业技术学院","炎黄职业技术学院","苏州农业职业技术学院","无锡工艺职业技术学院","常州纺织服装职业技术学院","紫琅职业技术学院","常州信息职业技术学院","健雄职业技术学院","江苏财经职业技术学院","盐城纺织职业技术学院","扬州工业职业技术学院","江海职业技术学院","南京铁道职业技术学院","九州职业技术学院","江苏联合职业技术学院","金山职业技术学院","无锡科技职业学院","硅湖职业技术学院","无锡城市职业技术学院","苏州托普信息职业技术学院","正德职业技术学院","江南影视艺术职业学院","南通农业职业技术学院","苏州工业园区职业技术学院","太湖创意职业技术学院","淮安信息职业技术学院","无锡南洋职业技术学院","钟山职业技术学院","南京交通职业技术学院","建东职业技术学院","南京视觉艺术职业学院","昆山登云科技职业学院","苏州港大思培科技职业学院","宿迁泽达职业技术学院","苏州工业园区服务外包职业学院"]},
+ {"id":"17","data":["南昌大学","江西理工大学","华东交通大学","东华理工大学","南昌航空大学","江西农业大学","江西师范大学","江西科技师范大学","江西财经大学","井冈山大学","景德镇陶瓷学院","南昌工程学院","南昌理工学院","南昌工学院","江西中医学院","赣南医学院","上饶师范学院","赣南师范学院","江西警察学院","江西服装学院","九江学院","江西科技学院","新余学院","宜春学院","江西中医药高等专科学校","南昌师范高等专科学校","景德镇高等专科学校","萍乡高等专科学校","江西护理职业技术学院","九江职业技术学院","江西工业职业技术学院","九江职业大学","江西泰豪动漫职业学院","江西先锋软件职业技术学院","江西工业贸易职业技术学院","江西枫林涉外经贸职业学院","江西司法警官职业学院","江西城市职业学院","江西太阳能科技职业学院","江西生物科技职业学院","江西电力职业技术学院","江西外语外贸职业学院","宜春职业技术学院","江西旅游商贸职业学院","抚州职业技术学院","江西青年职业学院","江西工程职业学院","江西建设职业技术学院","江西管理职业学院","江西农业工程职业学院","江西航空职业技术学院","江西经济管理职业学院","上饶职业技术学院","江西应用工程职业学院","江西制造职业技术学院","景德镇陶瓷职业技术学院","鹰潭职业技术学院","江西应用技术职业学院","江西渝州科技职业学院","共青科技职业学院","江西冶金职业技术学院","江西机电职业技术学院","江西新闻出版职业技术学院","江西现代职业技术学院","江西艺术职业学院","赣西科技职业学院","江西科技职业学院","江西交通职业技术学院","南昌职业学院","江西工业工程职业技术学院","江西工商职业技术学院","江西信息应用职业技术学院","江西环境工程职业学院","江西陶瓷工艺美术职业技术学院","江西财经职业学院"]},
+ {"id":"18","data":["大连理工大学","东北大学","大连海事大学","辽宁大学","大连大学","沈阳大学","沈阳理工大学","辽宁工程技术大学","沈阳工业大学","沈阳建筑大学","辽宁石油化工大学","大连交通大学","沈阳化工大学","辽宁科技大学","大连工业大学","辽宁工业大学","沈阳航空航天大学","沈阳农业大学","大连海洋大学","中国医科大学","大连医科大学","辽宁中医药大学","沈阳药科大学","辽宁师范大学","沈阳师范大学","渤海大学","东北财经大学","大连民族学院","中国刑事警察学院","沈阳工程学院","辽宁科技学院","大连东软信息学院","大连科技学院","辽宁医学院","沈阳医学院","辽宁何氏医学院","鞍山师范学院","大连外国语学院","辽宁财贸学院","沈阳体育学院","鲁迅美术学院","沈阳音乐学院","大连艺术学院","辽东学院","辽宁对外经贸学院","辽宁交通高等专科学校","朝阳师范高等专科学校","抚顺师范高等专科学校","铁岭师范高等专科学校","锦州师范高等专科学校","辽宁税务高等专科学校","辽宁警官高等专科学校","阜新高等专科学校","辽宁城市建设职业技术学院","辽宁冶金职业技术学院","辽宁工程职业学院","铁岭卫生职业学院","辽宁卫生职业技术学院","抚顺职业技术学院","辽阳职业技术学院","大连职业技术学院","渤海船舶职业学院","盘锦职业技术学院","大连商务职业学院","辽宁农业职业技术学院","营口职业技术学院","沈阳职业技术学院","辽宁金融职业学院","辽河石油职业技术学院","辽宁装备制造职业技术学院","辽宁现代服务职业技术学院","辽宁政法职业学院","沈阳北软信息职业技术学院","辽宁体育运动职业技术学院","辽宁职业学院","大连装备制造职业技术学院","沈阳航空职业技术学院","辽宁地质工程职业学院","辽宁铁道职业技术学院","辽宁建筑职业技术学院","大连枫叶职业技术学院","辽宁商贸职业学院","大连翻译职业学院","辽宁理工职业学院","大连软件职业学院","辽宁美术职业学院","大连航运职业技术学院","辽宁林业职业技术学院","辽宁经济职业技术学院","辽宁信息职业技术学院","辽宁广告职业学院","大连汽车职业技术学院","辽宁机电职业技术学院","辽宁石化职业技术学院"]},
+ {"id":"19","data":["内蒙古大学","内蒙古科技大学","内蒙古民族大学","内蒙古工业大学","内蒙古农业大学","内蒙古医科大学","内蒙古师范大学","内蒙古财经大学","河套学院","赤峰学院","集宁师范学院","呼伦贝尔学院","呼和浩特民族学院","乌兰察布医学高等专科学校","满洲里俄语职业学院","包头职业技术学院","内蒙古建筑职业技术学院","内蒙古机电职业技术学院","乌海职业技术学院","呼和浩特职业学院","内蒙古交通职业技术学院","阿拉善职业技术学院","赤峰工业职业技术学院","内蒙古能源职业学院","乌兰察布职业学院","内蒙古电子信息职业技术学院","通辽职业学院","内蒙古化工职业学院","内蒙古商贸职业学院","包头铁道职业技术学院","包头钢铁职业技术学院","内蒙古美术职业学院","科尔沁艺术职业学院","包头轻工职业技术学院","锡林郭勒职业学院","兴安职业技术学院","内蒙古警察职业学院","内蒙古体育职业学院","内蒙古经贸外语职业学院","赤峰职业技术学院","内蒙古北方职业技术学院","鄂尔多斯职业学院","内蒙古科技职业学院","内蒙古丰州职业学院","呼伦贝尔职业技术学院","内蒙古工业职业学院"]},
+ {"id":"20","data":["北方民族大学","宁夏大学","宁夏理工学院","宁夏医科大学","宁夏师范学院","银川能源学院","宁夏民族职业技术学院","宁夏司法警官职业学院","宁夏财经职业技术学院","宁夏工商职业技术学院","宁夏防沙治沙职业技术学院","宁夏职业技术学院","宁夏工业职业学院","宁夏建设职业技术学院"]},
+ {"id":"21","data":["青海大学","青海师范大学","青海民族大学","青海畜牧兽医职业技术学院","青海卫生职业技术学院","青海建筑职业技术学院","青海交通职业技术学院","青海警官职业学院"]},
+ {"id":"22","data":["山东大学","中国石油大学(华东)","中国海洋大学","青岛大学","山东科技大学","山东理工大学","烟台大学","聊城大学","青岛科技大学","青岛理工大学","济南大学","山东建筑大学","山东农业大学","青岛农业大学","山东中医药大学","山东师范大学","曲阜师范大学","临沂大学","山东财经大学","鲁东大学","山东万杰医学院","潍坊科技学院","山东英才学院","山东轻工业学院","潍坊学院","山东交通学院","青岛工学院","潍坊医学院","泰山医学院","滨州医学院","济宁医学院","德州学院","齐鲁师范学院","山东工商学院","山东警察学院","山东青年政治学院","山东政法学院","山东体育学院","山东艺术学院","山东工艺美术学院","泰山学院","枣庄学院","烟台南山学院","青岛滨海学院","济宁学院","菏泽学院","滨州学院","山东女子学院","山东协和学院","青岛黄海学院","山东电力高等专科学校","菏泽医学专科学校","山东医学高等专科学校","山东中医药高等专科学校","淄博师范高等专科学校","济南幼儿师范高等专科学校","山东畜牧兽医职业学院","山东商业职业技术学院","日照职业技术学院","曲阜远东职业技术学院","青岛职业技术学院","济宁职业技术学院","山东劳动职业技术学院","聊城职业技术学院","莱芜职业技术学院","威海职业学院","滨州职业学院","山东杏林科技职业学院","山东工业职业学院","山东胜利职业学院","山东华宇职业技术学院","山东商务职业学院","枣庄科技职业学院","山东水利职业学院","山东力明科技职业学院","东营职业学院","潍坊职业学院","山东职业学院","德州职业技术学院","青岛飞洋职业技术学院","青岛港湾职业技术学院","潍坊护理职业学院","潍坊工商职业学院","山东凯文科技职业学院","烟台汽车工程职业学院","山东城市建设职业学院","山东大王职业学院","烟台职业学院","山东海事职业学院","山东科技职业学院","泰山护理职业学院","山东圣翰财贸职业学院","青岛酒店管理职业技术学院","山东服装职业学院","枣庄职业学院","山东外国语职业学院","潍坊工程职业学院","济南工程职业技术学院","青岛求实职业技术学院","青岛恒星职业技术学院","山东传媒职业学院","济南职业学院","德州科技职业学院","泰山职业技术学院","济南护理职业学院","淄博职业学院","山东电子职业技术学院","山东现代职业学院","山东药品食品职业学院","菏泽家政职业学院","山东旅游职业学院","临沂职业学院","山东信息职业技术学院","山东理工职业学院","山东铝业职业学院","山东经贸职业学院","山东司法警官职业学院","烟台工程职业技术学院","山东丝绸纺织职业学院","山东外贸职业学院","山东化工职业学院","山东交通职业学院","山东外事翻译职业学院","青岛远洋船员职业学院","山东文化产业职业学院","哈尔滨工业大学(威海校区)"]},
+ {"id":"23","data":["山西大学","太原理工大学","中北大学","太原科技大学","山西农业大学","山西医科大学","山西师范大学","山西大同大学","山西财经大学","太原工业学院","山西中医学院","长治医学院","吕梁学院","忻州师范学院","太原师范学院","运城学院","长治学院","晋中学院","山西工商学院","太原电力高等专科学校","运城幼儿师范高等专科学校","晋中师范高等专科学校","阳泉师范高等专科学校","山西省财政税务专科学校","山西警官高等专科学校","太原大学","山西药科职业学院","山西兴华职业学院","山西建筑职业技术学院","山西轻工职业技术学院","山西工程职业技术学院","运城职业技术学院","山西老区职业技术学院","大同煤炭职业技术学院","山西交通职业技术学院","山西艺术职业学院","长治职业技术学院","晋城职业技术学院","山西电力职业技术学院","山西体育职业学院","山西警官职业学院","山西国际商务职业学院","山西华澳商贸职业学院","山西机电职业技术学院","山西戏剧职业学院","山西财贸职业技术学院","山西林业职业技术学院","山西水利职业技术学院","阳泉职业技术学院","晋中职业技术学院","运城护理职业学院","忻州职业技术学院","山西金融职业学院","临汾职业技术学院","山西职业技术学院","太原城市职业技术学院","山西运城农业职业技术学院","山西青年职业学院","山西经贸职业学院","山西同文职业技术学院","山西信息职业技术学院","山西管理职业学院","山西旅游职业学院","潞安职业技术学院","太原旅游职业学院","朔州职业技术学院","山西煤炭职业技术学院"]},
+ {"id":"24","data":["第四军医大学","西安交通大学","长安大学","西安电子科技大学","西北农林科技大学","陕西师范大学","西北工业大学","西北大学","延安大学","西安理工大学","西安建筑科技大学","西安科技大学","西安石油大学","西安工程大学","西安工业大学","西安邮电大学","西安外国语大学","西北政法大学","陕西科技大学","西安思源学院","陕西国际商贸学院","西安航空学院","陕西中医学院","西安医学院","宝鸡文理学院","渭南师范学院","榆林学院","陕西理工学院","咸阳师范学院","陕西学前师范学院","西安财经学院","西安体育学院","西安美术学院","西安音乐学院","陕西服装工程学院","西京学院","西安翻译学院","西安外事学院","西安文理学院","西安欧亚学院","西安培华学院","商洛学院","安康学院","西安电力高等专科学校","西安医学高等专科学校","陕西工业职业技术学院","杨凌职业技术学院","西安东方亚太职业技术学院","西安汽车科技职业学院","西安科技商贸职业学院","西安海棠职业学院","陕西邮电职业技术学院","陕西警官职业学院","商洛职业技术学院","陕西经济管理职业技术学院","陕西铁路工程职业技术学院","陕西电子信息职业技术学院","西安职业技术学院","陕西旅游烹饪职业学院","咸阳职业技术学院","铜川职业技术学院","安康职业技术学院","西安铁路职业技术学院","西安航空职业技术学院","陕西职业技术学院","陕西能源职业技术学院","陕西交通职业技术学院","渭南职业技术学院","陕西国防工业职业技术学院","陕西航空职业技术学院","陕西电子科技职业学院","陕西工商职业学院","陕西青年职业学院","西安高新科技职业学院","西安城市建设职业学院","延安职业技术学院","汉中职业技术学院","宝鸡职业技术学院","陕西财经职业技术学院","榆林职业技术学院"]},
+ {"id":"25","data":["复旦大学","同济大学","上海交通大学","华东理工大学","东华大学","华东师范大学","上海外国语大学","上海财经大学","上海大学","上海理工大学","上海海事大学","上海工程技术大学","上海海洋大学","上海中医药大学","上海师范大学","华东政法大学","上海海关学院","上海建桥学院","上海政法学院","上海电机学院","上海第二工业大学","上海电力学院","上海应用技术学院","上海对外贸易学院","上海立信会计学院","上海金融学院","上海商学院","上海体育学院","上海音乐学院","上海戏剧学院","上海杉达学院","第二军医大学","上海出版印刷高等专科学校","上海医疗器械高等专科学校","上海医药高等专科学校","上海旅游高等专科学校","上海公安高等专科学校","上海民航职业技术学院","上海电影艺术职业学院","上海健康职业技术学院","上海东海职业技术学院","上海新侨职业技术学院","上海工会管理职业学院","上海工艺美术职业学院","上海震旦职业学院","上海立达职业技术学院","上海中华职业技术学院","上海兴韦信息技术职业学院","上海邦德职业技术学院","上海农林职业技术学院","上海思博职业技术学院","上海欧华职业技术学院","上海民远职业技术学院","上海交通职业技术学院","上海建峰职业技术学院","上海城市管理职业技术学院","上海体育职业学院","上海电子信息职业技术学院","上海行健职业学院","上海济光职业技术学院","上海工商外国语职业学院","上海海事职业技术学院","上海科学技术职业学院","上海中侨职业技术学院"]},
+ {"id":"26","data":["四川大学","西南交通大学","电子科技大学","西南财经大学","西南民族大学","成都理工大学","西华大学","西南科技大学","四川农业大学","成都中医药大学","四川师范大学","西华师范大学","中国民用航空飞行学院","西南石油大学","成都工业学院","成都信息工程学院","四川理工学院","成都东软学院","泸州医学院","川北医学院","成都医学院","乐山师范学院","内江师范学院","四川文理学院","成都师范学院","四川警察学院","成都体育学院","四川音乐学院","四川民族学院","绵阳师范学院","攀枝花学院","成都学院","宜宾学院","西昌学院","成都纺织高等专科学校","四川烹饪高等专科学校","四川中医药高等专科学校","阿坝师范高等专科学校","川北幼儿师范高等专科学校","四川幼儿师范高等专科学校","民办四川天一学院","成都航空职业技术学院","四川商务职业学院","四川卫生康复职业学院","四川三河职业学院","四川电影电视职业学院","四川城市职业学院","四川汽车职业技术学院","成都农业科技职业学院","四川科技职业学院","宜宾职业技术学院","四川文化产业职业学院","四川华新现代职业学院","四川长江职业学院","四川司法警官职业学院","四川警安职业学院","四川信息职业技术学院","广安职业技术学院","四川现代职业学院","四川艺术职业学院","内江职业技术学院","成都职业技术学院","南充职业技术学院","四川水利职业技术学院","四川化工职业技术学院","四川航天职业技术学院","四川邮电职业技术学院","四川国际标榜职业学院","乐山职业技术学院","四川管理职业学院","四川财经职业学院","四川文化传媒职业学院","泸州职业技术学院","眉山职业技术学院","四川职业技术学院","四川托普信息技术职业学院","成都艺术职业学院","雅安职业技术学院","四川建筑职业技术学院","四川机电职业技术学院","四川交通职业技术学院","达州职业技术学院","四川工商职业技术学院","绵阳职业技术学院","四川电力职业技术学院","四川工程职业技术学院"]},
+ {"id":"27","data":["国立台湾大学","国立清华大学","国立成功大学","国立阳明大学","台湾交通大学","台北医学大学","国立中央大学","国立台湾大学科学与技术学院(原名国立台湾科技学院)","国立中山大学","国立台湾师范大学","国立政治大学","国立中兴大学"]},
+ {"id":"28","data":["南开大学","天津大学","中国民航大学","天津工业大学","天津科技大学","天津理工大学","天津医科大学","天津中医药大学","天津师范大学","天津职业技术师范大学","天津外国语大学","天津财经大学","天津商业大学","天津天狮学院","天津城市建设学院","天津农学院","天津体育学院","天津美术学院","天津音乐学院","天津医学高等专科学校","天津工程职业技术学院","天津机电职业技术学院","天津现代职业技术学院","天津公安警官职业学院","天津轻工职业技术学院","天津职业大学","天津渤海职业技术学院","天津滨海职业学院","天津电子信息职业技术学院","天津石油职业技术学院","天津交通职业学院","天津中德职业技术学院","天津城市职业学院","天津冶金职业技术学院","天津商务职业学院","天津城市建设管理职业技术学院","天津生物工程职业技术学院","天津艺术职业学院","天津国土资源和房屋职业学院","天津海运职业学院","天津青年职业学院","天津广播影视职业学院","天津铁道职业技术学院","天津开发区职业技术学院","天津工艺美术职业学院"]},
+ {"id":"29","data":["西藏大学","西藏藏医学院","西藏民族学院","拉萨师范高等专科学校","西藏警官高等专科学校","西藏职业技术学院"]},
+ {"id":"30","data":["香港大学","香港中文大学","香港科技大学","香港城市大学","香港理工大学","香港浸会大学","香港岭南大学","香港教育学院"]},
+ {"id":"31","data":["新疆大学","石河子大学","新疆农业大学","塔里木大学","新疆医科大学","新疆师范大学","新疆财经大学","新疆工程学院","伊犁师范学院","喀什师范学院","新疆警察学院","新疆艺术学院","昌吉学院","新疆维吾尔医学专科学校","和田师范专科学校","新疆兵团警官高等专科学校","新疆农业职业技术学院","乌鲁木齐职业大学","新疆机电职业技术学院","新疆轻工职业技术学院","克拉玛依职业技术学院","新疆职业大学","伊犁职业技术学院","新疆建设职业技术学院","巴音郭楞职业技术学院","阿克苏职业技术学院","新疆天山职业技术学院","新疆现代职业技术学院","新疆交通职业技术学院","新疆石河子职业技术学院","新疆能源职业技术学院","新疆体育职业技术学院","新疆应用职业技术学院","昌吉职业技术学院","新疆师范高等专科学校"]},
+ {"id":"32","data":["云南大学","昆明理工大学","云南农业大学","西南林业大学","昆明医科大学","云南师范大学","云南财经大学","云南民族大学","云南中医学院","昭通学院","曲靖师范学院","玉溪师范学院","楚雄师范学院","普洱学院","红河学院","云南工商学院","云南警官学院","云南艺术学院","大理学院","昆明学院","保山学院","文山学院","昆明冶金高等专科学校","曲靖医学高等专科学校","楚雄医药高等专科学校","保山中医药高等专科学校","丽江师范高等专科学校","德宏师范高等专科学校","临沧师范高等专科学校","云南经贸外事职业学院","云南农业职业技术学院","昆明工业职业技术学院","云南机电职业技术学院","云南热带作物职业学院","云南司法警官职业学院","云南国防工业职业技术学院","云南锡业职业技术学院","云南能源职业技术学院","云南三鑫职业技术学院","德宏职业学院","云南新兴职业学院","云南旅游职业学院","云南经济管理职业学院","云南外事外语职业学院","红河卫生职业学院","玉溪农业职业技术学院","云南文化艺术职业学院","昆明艺术职业学院","昆明扬帆职业技术学院","云南城市建设职业学院","西双版纳职业技术学院","云南林业职业技术学院","云南国土资源职业学院","昆明卫生职业学院","云南科技信息职业学院","云南体育运动职业技术学院","云南现代职业技术学院","云南交通职业技术学院","云南商务职业学院"]},
+ {"id":"33","data":["浙江大学","宁波大学","浙江工业大学","杭州电子科技大学","浙江理工大学","浙江农林大学","浙江中医药大学","浙江师范大学","杭州师范大学","浙江工商大学","宁波诺丁汉大学","温州大学","公安海警学院","宁波大红鹰学院","浙江越秀外国语学院","宁波工程学院","中国计量学院","嘉兴学院","浙江科技学院","浙江海洋学院","温州医学院","绍兴文理学院","台州学院","湖州师范学院","浙江传媒学院","浙江外国语学院","浙江财经学院","浙江警察学院","中国美术学院","丽水学院","浙江树人学院","浙江万里学院","衢州学院","浙江水利水电专科学校","浙江医药高等专科学校","浙江医学高等专科学校","宁波职业技术学院","金华职业技术学院","浙江交通职业技术学院","温州职业技术学院","台州职业技术学院","浙江旅游职业学院","宁波城市职业技术学院","浙江工商职业技术学院","浙江经济职业技术学院","浙江机电职业技术学院","杭州万向职业技术学院","浙江商业职业技术学院","浙江汽车职业技术学院","浙江横店影视职业学院","浙江警官职业学院","嘉兴南洋职业技术学院","浙江工业职业技术学院","杭州科技职业技术学院","浙江建设职业技术学院","浙江经贸职业技术学院","浙江育英职业技术学院","温州科技职业学院","浙江长征职业技术学院","绍兴职业技术学院","杭州职业技术学院","浙江纺织服装职业技术学院","台州科技职业学院","浙江邮电职业技术学院","浙江同济科技职业学院","浙江广厦建设职业技术学院","浙江体育职业技术学院","宁波卫生职业技术学院","浙江工贸职业技术学院","浙江国际海运职业技术学院","嘉兴职业技术学院","湖州职业技术学院","衢州职业技术学院","丽水职业技术学院","浙江金融职业学院","义乌工商职业技术学院","浙江东方职业技术学院","浙江艺术职业学院","浙江农业商贸职业学院","浙江电力职业技术学院"]}
+ ]
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/MarkerManager.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/MarkerManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..e558e70185b8c15df78bb2d33e7ededd4dba3b44
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/MarkerManager.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil;
+
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.Marker;
+import com.baidu.mapapi.map.MarkerOptions;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Keeps track of collections of markers on the map. Delegates all Marker-related events to each
+ * collection's individually managed listeners.
+ *
+ * All marker operations (adds and removes) should occur via its collection class. That is, don't
+ * add a marker via a collection, then remove it via Marker.remove()
+ */
+public class MarkerManager implements BaiduMap.OnMarkerClickListener, BaiduMap.OnMarkerDragListener {
+ private final BaiduMap mMap;
+
+ private final Map mNamedCollections = new HashMap();
+ private final Map mAllMarkers = new HashMap();
+
+ public MarkerManager(BaiduMap map) {
+ this.mMap = map;
+ }
+
+ public Collection newCollection() {
+ return new Collection();
+ }
+
+ /**
+ * Create a new named collection, which can later be looked up by {@link #getCollection(String)}
+ * @param id a unique id for this collection.
+ */
+ public Collection newCollection(String id) {
+ if (mNamedCollections.get(id) != null) {
+ throw new IllegalArgumentException("collection id is not unique: " + id);
+ }
+ Collection collection = new Collection();
+ mNamedCollections.put(id, collection);
+ return collection;
+ }
+
+ /**
+ * Gets a named collection that was created by {@link #newCollection(String)}
+ * @param id the unique id for this collection.
+ */
+ public Collection getCollection(String id) {
+ return mNamedCollections.get(id);
+ }
+
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ Collection collection = mAllMarkers.get(marker);
+ if (collection != null && collection.mMarkerClickListener != null) {
+ // you can set the click action
+ return collection.mMarkerClickListener.onMarkerClick(marker);
+ } else {
+ ; // click single maker out of cluster
+ }
+ return false;
+ }
+
+ @Override
+ public void onMarkerDragStart(Marker marker) {
+ Collection collection = mAllMarkers.get(marker);
+ if (collection != null && collection.mMarkerDragListener != null) {
+ collection.mMarkerDragListener.onMarkerDragStart(marker);
+ }
+ }
+
+ @Override
+ public void onMarkerDrag(Marker marker) {
+ Collection collection = mAllMarkers.get(marker);
+ if (collection != null && collection.mMarkerDragListener != null) {
+ collection.mMarkerDragListener.onMarkerDrag(marker);
+ }
+ }
+
+ @Override
+ public void onMarkerDragEnd(Marker marker) {
+ Collection collection = mAllMarkers.get(marker);
+ if (collection != null && collection.mMarkerDragListener != null) {
+ collection.mMarkerDragListener.onMarkerDragEnd(marker);
+ }
+ }
+
+ /**
+ * Removes a marker from its collection.
+ *
+ * @param marker the marker to remove.
+ * @return true if the marker was removed.
+ */
+ public boolean remove(Marker marker) {
+ Collection collection = mAllMarkers.get(marker);
+ return collection != null && collection.remove(marker);
+ }
+
+ public class Collection {
+ private final Set mMarkers = new HashSet();
+ private BaiduMap.OnMarkerClickListener mMarkerClickListener;
+ private BaiduMap.OnMarkerDragListener mMarkerDragListener;
+
+ public Collection() {
+ }
+
+ public Marker addMarker(MarkerOptions opts) {
+ Marker marker = (Marker) mMap.addOverlay(opts);
+ mMarkers.add(marker);
+ mAllMarkers.put(marker, Collection.this);
+ return marker;
+ }
+
+ public boolean remove(Marker marker) {
+ if (mMarkers.remove(marker)) {
+ mAllMarkers.remove(marker);
+ marker.remove();
+ return true;
+ }
+ return false;
+ }
+
+ public void clear() {
+ for (Marker marker : mMarkers) {
+ marker.remove();
+ mAllMarkers.remove(marker);
+ }
+ mMarkers.clear();
+ }
+
+ public java.util.Collection getMarkers() {
+ return Collections.unmodifiableCollection(mMarkers);
+ }
+
+ public void setOnMarkerClickListener(BaiduMap.OnMarkerClickListener markerClickListener) {
+ mMarkerClickListener = markerClickListener;
+ }
+
+ public void setOnMarkerDragListener(BaiduMap.OnMarkerDragListener markerDragListener) {
+ mMarkerDragListener = markerDragListener;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/Cluster.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/Cluster.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4244479603936bb48786724cfba14eb0b3dcf58
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/Cluster.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering;
+
+
+import com.baidu.mapapi.model.LatLng;
+
+import java.util.Collection;
+
+/**
+ * A collection of ClusterItems that are nearby each other.
+ */
+public interface Cluster {
+ public LatLng getPosition();
+
+ Collection getItems();
+
+ int getSize();
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterItem.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7d4c420151edfb93c453e461bf6a37f675f89a6
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterItem.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering;
+
+
+import com.baidu.mapapi.map.BitmapDescriptor;
+import com.baidu.mapapi.model.LatLng;
+
+/**
+ * ClusterItem represents a marker on the map.
+ */
+public interface ClusterItem {
+
+ /**
+ * The position of this marker. This must always return the same value.
+ */
+ LatLng getPosition();
+
+ BitmapDescriptor getBitmapDescriptor();
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterManager.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..a659f616bf5436dd6f98e5be96daef8c219ab2c4
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/ClusterManager.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.os.Build;
+
+import com.baidu.mapapi.clusterutil.MarkerManager;
+import com.baidu.mapapi.clusterutil.clustering.algo.Algorithm;
+import com.baidu.mapapi.clusterutil.clustering.algo.NonHierarchicalDistanceBasedAlgorithm;
+import com.baidu.mapapi.clusterutil.clustering.algo.PreCachingAlgorithmDecorator;
+import com.baidu.mapapi.clusterutil.clustering.view.ClusterRenderer;
+import com.baidu.mapapi.clusterutil.clustering.view.DefaultClusterRenderer;
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.MapStatus;
+import com.baidu.mapapi.map.Marker;
+
+import java.util.Collection;
+import java.util.Set;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Groups many items on a map based on zoom level.
+ *
+ * ClusterManager should be added to the map
+ *
+ */
+public class ClusterManager implements
+ BaiduMap.OnMapStatusChangeListener, BaiduMap.OnMarkerClickListener {
+ protected final MarkerManager mMarkerManager;
+ protected final MarkerManager.Collection mMarkers;
+ protected final MarkerManager.Collection mClusterMarkers;
+
+ protected Algorithm mAlgorithm;
+ protected final ReadWriteLock mAlgorithmLock = new ReentrantReadWriteLock();
+ protected ClusterRenderer mRenderer;
+
+ protected BaiduMap mMap;
+ protected MapStatus mPreviousCameraPosition;
+ protected ClusterTask mClusterTask;
+ protected final ReadWriteLock mClusterTaskLock = new ReentrantReadWriteLock();
+
+ protected OnClusterItemClickListener mOnClusterItemClickListener;
+ protected OnClusterInfoWindowClickListener mOnClusterInfoWindowClickListener;
+ protected OnClusterItemInfoWindowClickListener mOnClusterItemInfoWindowClickListener;
+ protected OnClusterClickListener mOnClusterClickListener;
+
+ public ClusterManager(Context context, BaiduMap map) {
+ this(context, map, new MarkerManager(map));
+ }
+
+ public ClusterManager(Context context, BaiduMap map, MarkerManager markerManager) {
+ mMap = map;
+ mMarkerManager = markerManager;
+ mClusterMarkers = markerManager.newCollection();
+ mMarkers = markerManager.newCollection();
+ mRenderer = new DefaultClusterRenderer(context, map, this);
+ mAlgorithm = new PreCachingAlgorithmDecorator(new NonHierarchicalDistanceBasedAlgorithm());
+ mClusterTask = new ClusterTask();
+ mRenderer.onAdd();
+ }
+
+ public MarkerManager.Collection getMarkerCollection() {
+ return mMarkers;
+ }
+
+ public MarkerManager.Collection getClusterMarkerCollection() {
+ return mClusterMarkers;
+ }
+
+ public MarkerManager getMarkerManager() {
+ return mMarkerManager;
+ }
+
+ public void setRenderer(ClusterRenderer view) {
+ mRenderer.setOnClusterClickListener(null);
+ mRenderer.setOnClusterItemClickListener(null);
+ mClusterMarkers.clear();
+ mMarkers.clear();
+ mRenderer.onRemove();
+ mRenderer = view;
+ mRenderer.onAdd();
+ mRenderer.setOnClusterClickListener(mOnClusterClickListener);
+ mRenderer.setOnClusterInfoWindowClickListener(mOnClusterInfoWindowClickListener);
+ mRenderer.setOnClusterItemClickListener(mOnClusterItemClickListener);
+ mRenderer.setOnClusterItemInfoWindowClickListener(mOnClusterItemInfoWindowClickListener);
+ cluster();
+ }
+
+ public void setAlgorithm(Algorithm algorithm) {
+ mAlgorithmLock.writeLock().lock();
+ try {
+ if (mAlgorithm != null) {
+ algorithm.addItems(mAlgorithm.getItems());
+ }
+ mAlgorithm = new PreCachingAlgorithmDecorator(algorithm);
+ } finally {
+ mAlgorithmLock.writeLock().unlock();
+ }
+ cluster();
+ }
+
+ public void clearItems() {
+ mAlgorithmLock.writeLock().lock();
+ try {
+ mAlgorithm.clearItems();
+ } finally {
+ mAlgorithmLock.writeLock().unlock();
+ }
+ }
+
+ public void addItems(Collection items) {
+ mAlgorithmLock.writeLock().lock();
+ try {
+ mAlgorithm.addItems(items);
+ } finally {
+ mAlgorithmLock.writeLock().unlock();
+ }
+
+ }
+
+ public void addItem(T myItem) {
+ mAlgorithmLock.writeLock().lock();
+ try {
+ mAlgorithm.addItem(myItem);
+ } finally {
+ mAlgorithmLock.writeLock().unlock();
+ }
+ }
+
+ public void removeItem(T item) {
+ mAlgorithmLock.writeLock().lock();
+ try {
+ mAlgorithm.removeItem(item);
+ } finally {
+ mAlgorithmLock.writeLock().unlock();
+ }
+ }
+
+ /**
+ * Force a re-cluster. You may want to call this after adding new item(s).
+ */
+ public void cluster() {
+ mClusterTaskLock.writeLock().lock();
+ try {
+ // Attempt to cancel the in-flight request.
+ mClusterTask.cancel(true);
+ mClusterTask = new ClusterTask();
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
+ mClusterTask.execute(mMap.getMapStatus().zoom);
+ } else {
+ mClusterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mMap.getMapStatus().zoom);
+ }
+ } finally {
+ mClusterTaskLock.writeLock().unlock();
+ }
+ }
+
+
+ @Override
+ public void onMapStatusChangeStart(MapStatus mapStatus) {
+
+ }
+
+ @Override
+ public void onMapStatusChangeStart(MapStatus mapStatus, int reason) {
+
+ }
+
+// @Override
+// public void onMapStatusChangeStart(MapStatus status, int reason) {
+//
+// }
+
+ @Override
+ public void onMapStatusChange(MapStatus mapStatus) {
+ if (mRenderer instanceof BaiduMap.OnMapStatusChangeListener) {
+ ((BaiduMap.OnMapStatusChangeListener) mRenderer).onMapStatusChange(mapStatus);
+ }
+
+ // Don't re-compute clusters if the map has just been panned/tilted/rotated.
+ MapStatus position = mMap.getMapStatus();
+ if (mPreviousCameraPosition != null && mPreviousCameraPosition.zoom == position.zoom) {
+ return;
+ }
+ mPreviousCameraPosition = mMap.getMapStatus();
+
+ cluster();
+ }
+
+ @Override
+ public void onMapStatusChangeFinish(MapStatus mapStatus) {
+
+ }
+
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ return getMarkerManager().onMarkerClick(marker);
+ }
+
+ /**
+ * Runs the clustering algorithm in a background thread, then re-paints when results come back.
+ */
+ private class ClusterTask extends AsyncTask>> {
+ @Override
+ protected Set extends Cluster> doInBackground(Float... zoom) {
+ mAlgorithmLock.readLock().lock();
+ try {
+ return mAlgorithm.getClusters(zoom[0]);
+ } finally {
+ mAlgorithmLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Set extends Cluster> clusters) {
+ mRenderer.onClustersChanged(clusters);
+ }
+ }
+
+ /**
+ * Sets a callback that's invoked when a Cluster is tapped. Note: For this listener to function,
+ * the ClusterManager must be added as a click listener to the map.
+ */
+ public void setOnClusterClickListener(OnClusterClickListener listener) {
+ mOnClusterClickListener = listener;
+ mRenderer.setOnClusterClickListener(listener);
+ }
+
+ /**
+ * Sets a callback that's invoked when a Cluster is tapped. Note: For this listener to function,
+ * the ClusterManager must be added as a info window click listener to the map.
+ */
+ public void setOnClusterInfoWindowClickListener(OnClusterInfoWindowClickListener listener) {
+ mOnClusterInfoWindowClickListener = listener;
+ mRenderer.setOnClusterInfoWindowClickListener(listener);
+ }
+
+ /**
+ * Sets a callback that's invoked when an individual ClusterItem is tapped. Note: For this
+ * listener to function, the ClusterManager must be added as a click listener to the map.
+ */
+ public void setOnClusterItemClickListener(OnClusterItemClickListener listener) {
+ mOnClusterItemClickListener = listener;
+ mRenderer.setOnClusterItemClickListener(listener);
+ }
+
+ /**
+ * Sets a callback that's invoked when an individual ClusterItem's Info Window is tapped. Note: For this
+ * listener to function, the ClusterManager must be added as a info window click listener to the map.
+ */
+ public void setOnClusterItemInfoWindowClickListener(OnClusterItemInfoWindowClickListener listener) {
+ mOnClusterItemInfoWindowClickListener = listener;
+ mRenderer.setOnClusterItemInfoWindowClickListener(listener);
+ }
+
+ /**
+ * Called when a Cluster is clicked.
+ */
+ public interface OnClusterClickListener {
+ public boolean onClusterClick(Cluster cluster);
+ }
+
+ /**
+ * Called when a Cluster's Info Window is clicked.
+ */
+ public interface OnClusterInfoWindowClickListener {
+ public void onClusterInfoWindowClick(Cluster cluster);
+ }
+
+ /**
+ * Called when an individual ClusterItem is clicked.
+ */
+ public interface OnClusterItemClickListener {
+ public boolean onClusterItemClick(T item);
+ }
+
+ /**
+ * Called when an individual ClusterItem's Info Window is clicked.
+ */
+ public interface OnClusterItemInfoWindowClickListener {
+ public void onClusterItemInfoWindowClick(T item);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/MyClusterManager.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/MyClusterManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ea2ee043ac2c4a55bd8e6653f805858413c7a27
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/MyClusterManager.java
@@ -0,0 +1,25 @@
+package com.baidu.mapapi.clusterutil.clustering;
+
+import android.content.Context;
+
+import com.baidu.mapapi.clusterutil.MarkerManager;
+import com.baidu.mapapi.clusterutil.clustering.view.MyClusterRenderer;
+import com.baidu.mapapi.map.BaiduMap;
+
+/**
+ * Created by jq on 2017/12/7.
+ */
+
+public class MyClusterManager extends ClusterManager{
+
+ public MyClusterManager(Context context, BaiduMap map) {
+ super(context, map);
+
+ }
+
+ public MyClusterManager(Context context, BaiduMap map, MarkerManager markerManager) {
+ super(context, map, markerManager);
+ mRenderer = new MyClusterRenderer(context, map, this);
+ mRenderer.onAdd();
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/Algorithm.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/Algorithm.java
new file mode 100644
index 0000000000000000000000000000000000000000..362a18d367ad2f2d11f22e20f690b0c240b1c723
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/Algorithm.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.algo;
+
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * Logic for computing clusters
+ */
+public interface Algorithm {
+ void addItem(T item);
+
+ void addItems(Collection items);
+
+ void clearItems();
+
+ void removeItem(T item);
+
+ Set extends Cluster> getClusters(double zoom);
+
+ Collection getItems();
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/NonHierarchicalDistanceBasedAlgorithm.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/NonHierarchicalDistanceBasedAlgorithm.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcc5074f250907845c7b248bcef722fe0ab84bc5
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/NonHierarchicalDistanceBasedAlgorithm.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.algo;
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+import com.baidu.mapapi.clusterutil.projection.Bounds;
+import com.baidu.mapapi.clusterutil.projection.Point;
+import com.baidu.mapapi.clusterutil.projection.SphericalMercatorProjection;
+import com.baidu.mapapi.clusterutil.quadtree.PointQuadTree;
+import com.baidu.mapapi.model.LatLng;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A simple clustering algorithm with O(nlog n) performance. Resulting clusters are not
+ * hierarchical.
+ *
+ * High level algorithm:
+ * 1. Iterate over items in the order they were added (candidate clusters).
+ * 2. Create a cluster with the center of the item.
+ * 3. Add all items that are within a certain distance to the cluster.
+ * 4. Move any items out of an existing cluster if they are closer to another cluster.
+ * 5. Remove those items from the list of candidate clusters.
+ *
+ * Clusters have the center of the first element (not the centroid of the items within it).
+ */
+public class NonHierarchicalDistanceBasedAlgorithm implements Algorithm {
+ public static final int MAX_DISTANCE_AT_ZOOM = 300; // essentially 100 dp.
+
+ /**
+ * Any modifications should be synchronized on mQuadTree.
+ */
+ private final Collection> mItems = new ArrayList>();
+
+ /**
+ * Any modifications should be synchronized on mQuadTree.
+ */
+ private final PointQuadTree> mQuadTree = new PointQuadTree>(0, 1, 0, 1);
+
+ private static final SphericalMercatorProjection PROJECTION = new SphericalMercatorProjection(1);
+
+ @Override
+ public void addItem(T item) {
+ final QuadItem quadItem = new QuadItem(item);
+ synchronized (mQuadTree) {
+ mItems.add(quadItem);
+ mQuadTree.add(quadItem);
+ }
+ }
+
+ @Override
+ public void addItems(Collection items) {
+ for (T item : items) {
+ addItem(item);
+ }
+ }
+
+ @Override
+ public void clearItems() {
+ synchronized (mQuadTree) {
+ mItems.clear();
+ mQuadTree.clear();
+ }
+ }
+
+ @Override
+ public void removeItem(T item) {
+ // TODO: delegate QuadItem#hashCode and QuadItem#equals to its item.
+ throw new UnsupportedOperationException("NonHierarchicalDistanceBasedAlgorithm.remove not implemented");
+ }
+
+ /**
+ * cluster算法核心
+ * @param zoom map的级别
+ * @return
+ */
+ @Override
+ public Set extends Cluster> getClusters(double zoom) {
+ final int discreteZoom = (int) zoom;
+
+ final double zoomSpecificSpan = MAX_DISTANCE_AT_ZOOM / Math.pow(2, discreteZoom) / 256;
+
+ final Set> visitedCandidates = new HashSet>();
+ final Set> results = new HashSet>();
+ final Map, Double> distanceToCluster = new HashMap, Double>();
+ final Map, StaticCluster> itemToCluster =
+ new HashMap, StaticCluster>();
+
+ synchronized (mQuadTree) {
+ for (QuadItem candidate : mItems) {
+ if (visitedCandidates.contains(candidate)) {
+ // Candidate is already part of another cluster.
+ continue;
+ }
+
+ Bounds searchBounds = createBoundsFromSpan(candidate.getPoint(), zoomSpecificSpan);
+ Collection> clusterItems;
+ // search 某边界范围内的clusterItems
+ clusterItems = mQuadTree.search(searchBounds);
+ if (clusterItems.size() == 1) {
+ // Only the current marker is in range. Just add the single item to the results.
+ results.add(candidate);
+ visitedCandidates.add(candidate);
+ distanceToCluster.put(candidate, 0d);
+ continue;
+ }
+ StaticCluster cluster =
+ new StaticCluster(candidate.mClusterItem.getPosition());
+ results.add(cluster);
+
+ for (QuadItem clusterItem : clusterItems) {
+ Double existingDistance = distanceToCluster.get(clusterItem);
+ double distance = distanceSquared(clusterItem.getPoint(), candidate.getPoint());
+ if (existingDistance != null) {
+ // Item already belongs to another cluster. Check if it's closer to this cluster.
+ if (existingDistance < distance) {
+ continue;
+ }
+ // Move item to the closer cluster.
+ itemToCluster.get(clusterItem).remove(clusterItem.mClusterItem);
+ }
+ distanceToCluster.put(clusterItem, distance);
+ cluster.add(clusterItem.mClusterItem);
+ itemToCluster.put(clusterItem, cluster);
+ }
+ visitedCandidates.addAll(clusterItems);
+ }
+ }
+ return results;
+ }
+
+ @Override
+ public Collection getItems() {
+ final List items = new ArrayList();
+ synchronized (mQuadTree) {
+ for (QuadItem quadItem : mItems) {
+ items.add(quadItem.mClusterItem);
+ }
+ }
+ return items;
+ }
+
+ private double distanceSquared(Point a, Point b) {
+ return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
+ }
+
+ private Bounds createBoundsFromSpan(Point p, double span) {
+ // TODO: Use a span that takes into account the visual size of the marker, not just its
+ // LatLng.
+ double halfSpan = span / 2;
+ return new Bounds(
+ p.x - halfSpan, p.x + halfSpan,
+ p.y - halfSpan, p.y + halfSpan);
+ }
+
+ private static class QuadItem implements PointQuadTree.Item, Cluster {
+ private final T mClusterItem;
+ private final Point mPoint;
+ private final LatLng mPosition;
+ private Set singletonSet;
+
+ private QuadItem(T item) {
+ mClusterItem = item;
+ mPosition = item.getPosition();
+ mPoint = PROJECTION.toPoint(mPosition);
+ singletonSet = Collections.singleton(mClusterItem);
+ }
+
+ @Override
+ public Point getPoint() {
+ return mPoint;
+ }
+
+ @Override
+ public LatLng getPosition() {
+ return mPosition;
+ }
+
+ @Override
+ public Set getItems() {
+ return singletonSet;
+ }
+
+ @Override
+ public int getSize() {
+ return 1;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/PreCachingAlgorithmDecorator.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/PreCachingAlgorithmDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d4a43a44bcb15d8b1f63695e466178b70757449
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/PreCachingAlgorithmDecorator.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.algo;
+
+import android.support.v4.util.LruCache;
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+
+import java.util.Collection;
+import java.util.Set;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Optimistically fetch clusters for adjacent zoom levels, caching them as necessary.
+ */
+public class PreCachingAlgorithmDecorator implements Algorithm {
+ private final Algorithm mAlgorithm;
+
+ // TODO: evaluate maxSize parameter for LruCache.
+ private final LruCache>> mCache =
+ new LruCache>>(5);
+ private final ReadWriteLock mCacheLock = new ReentrantReadWriteLock();
+
+ public PreCachingAlgorithmDecorator(Algorithm algorithm) {
+ mAlgorithm = algorithm;
+ }
+
+ public void addItem(T item) {
+ mAlgorithm.addItem(item);
+ clearCache();
+ }
+
+ @Override
+ public void addItems(Collection items) {
+ mAlgorithm.addItems(items);
+ clearCache();
+ }
+
+ @Override
+ public void clearItems() {
+ mAlgorithm.clearItems();
+ clearCache();
+ }
+
+ public void removeItem(T item) {
+ mAlgorithm.removeItem(item);
+ clearCache();
+ }
+
+ private void clearCache() {
+ mCache.evictAll();
+ }
+
+ @Override
+ public Set extends Cluster> getClusters(double zoom) {
+ int discreteZoom = (int) zoom;
+ Set extends Cluster> results = getClustersInternal(discreteZoom);
+ // TODO: Check if requests are already in-flight.
+ if (mCache.get(discreteZoom + 1) == null) {
+ new Thread(new PrecacheRunnable(discreteZoom + 1)).start();
+ }
+ if (mCache.get(discreteZoom - 1) == null) {
+ new Thread(new PrecacheRunnable(discreteZoom - 1)).start();
+ }
+ return results;
+ }
+
+ @Override
+ public Collection getItems() {
+ return mAlgorithm.getItems();
+ }
+
+ private Set extends Cluster> getClustersInternal(int discreteZoom) {
+ Set extends Cluster> results;
+ mCacheLock.readLock().lock();
+ results = mCache.get(discreteZoom);
+ mCacheLock.readLock().unlock();
+
+ if (results == null) {
+ mCacheLock.writeLock().lock();
+ results = mCache.get(discreteZoom);
+ if (results == null) {
+ results = mAlgorithm.getClusters(discreteZoom);
+ mCache.put(discreteZoom, results);
+ }
+ mCacheLock.writeLock().unlock();
+ }
+ return results;
+ }
+
+ private class PrecacheRunnable implements Runnable {
+ private final int mZoom;
+
+ public PrecacheRunnable(int zoom) {
+ mZoom = zoom;
+ }
+
+ @Override
+ public void run() {
+ try {
+ // Wait between 500 - 1000 ms.
+ Thread.sleep((long) (Math.random() * 500 + 500));
+ } catch (InterruptedException e) {
+ // ignore. keep going.
+ }
+ getClustersInternal(mZoom);
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/StaticCluster.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/StaticCluster.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdd65760e34203268550ec380d8d9cde29044835
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/algo/StaticCluster.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.algo;
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+import com.baidu.mapapi.model.LatLng;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * A cluster whose center is determined upon creation.
+ */
+public class StaticCluster implements Cluster {
+ private final LatLng mCenter;
+ private final List mItems = new ArrayList();
+
+ public StaticCluster(LatLng center) {
+ mCenter = center;
+ }
+
+
+
+ public boolean add(T t) {
+ return mItems.add(t);
+ }
+
+ @Override
+ public LatLng getPosition() {
+ return mCenter;
+ }
+
+ public boolean remove(T t) {
+ return mItems.remove(t);
+ }
+
+ @Override
+ public Collection getItems() {
+ return mItems;
+ }
+
+ @Override
+ public int getSize() {
+ return mItems.size();
+ }
+
+ @Override
+ public String toString() {
+ return "StaticCluster{"
+ + "mCenter=" + mCenter
+ + ", mItems.size=" + mItems.size()
+ + '}';
+ }
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/ClusterRenderer.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/ClusterRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb0f5474f3bca0c2b1a53816d52fb5c32df5dde4
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/ClusterRenderer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.view;
+
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+import com.baidu.mapapi.clusterutil.clustering.ClusterManager;
+
+import java.util.Set;
+
+/**
+ * Renders clusters.
+ */
+public interface ClusterRenderer {
+
+ /**
+ * Called when the view needs to be updated because new clusters need to be displayed.
+ * @param clusters the clusters to be displayed.
+ */
+ void onClustersChanged(Set extends Cluster> clusters);
+
+ void setOnClusterClickListener(ClusterManager.OnClusterClickListener listener);
+
+ void setOnClusterInfoWindowClickListener(ClusterManager.OnClusterInfoWindowClickListener listener);
+
+ void setOnClusterItemClickListener(ClusterManager.OnClusterItemClickListener listener);
+
+ void setOnClusterItemInfoWindowClickListener(ClusterManager.OnClusterItemInfoWindowClickListener listener);
+
+ /**
+ * Called when the view is added.
+ */
+ void onAdd();
+
+ /**
+ * Called when the view is removed.
+ */
+ void onRemove();
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/DefaultClusterRenderer.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/DefaultClusterRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e6b6dc282d9480729753a1536e05760c70a4409
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/DefaultClusterRenderer.java
@@ -0,0 +1,923 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.clustering.view;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.OvalShape;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.MessageQueue;
+import android.util.SparseArray;
+import android.view.ViewGroup;
+import android.view.animation.DecelerateInterpolator;
+
+import com.baidu.mapapi.clusterutil.MarkerManager;
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterItem;
+import com.baidu.mapapi.clusterutil.clustering.ClusterManager;
+import com.baidu.mapapi.clusterutil.projection.Point;
+import com.baidu.mapapi.clusterutil.projection.SphericalMercatorProjection;
+import com.baidu.mapapi.clusterutil.ui.IconGenerator;
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.BitmapDescriptor;
+import com.baidu.mapapi.map.BitmapDescriptorFactory;
+import com.baidu.mapapi.map.Marker;
+import com.baidu.mapapi.map.MarkerOptions;
+import com.baidu.mapapi.map.Projection;
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.model.LatLngBounds;
+import com.jiuqi.elove.R;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import static com.baidu.mapapi.clusterutil.clustering.algo.NonHierarchicalDistanceBasedAlgorithm.MAX_DISTANCE_AT_ZOOM;
+
+
+/**
+ * The default view for a ClusterManager. Markers are animated in and out of clusters.
+ */
+public class DefaultClusterRenderer implements
+ ClusterRenderer {
+ private static final boolean SHOULD_ANIMATE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
+ private final BaiduMap mMap;
+ private final IconGenerator mIconGenerator;
+ private final ClusterManager mClusterManager;
+ private final float mDensity;
+
+ private static final int[] BUCKETS = {10, 20, 50, 100, 200, 500, 1000};
+ private ShapeDrawable mColoredCircleBackground;
+
+ /**
+ * Markers that are currently on the map.
+ */
+ private Set mMarkers = Collections.newSetFromMap(
+ new ConcurrentHashMap());
+
+ /**
+ * Icons for each bucket.
+ */
+ private SparseArray mIcons = new SparseArray();
+
+ /**
+ * Markers for single ClusterItems.
+ */
+ private MarkerCache mMarkerCache = new MarkerCache();
+
+ /**
+ * If cluster size is less than this size, display individual markers.
+ */
+ private static final int MIN_CLUSTER_SIZE = 1;
+
+ /**
+ * The currently displayed set of clusters.
+ */
+ private Set extends Cluster> mClusters;
+
+ /**
+ * Lookup between markers and the associated cluster.
+ */
+ private Map> mMarkerToCluster = new HashMap>();
+ private Map, Marker> mClusterToMarker = new HashMap, Marker>();
+
+ /**
+ * The target zoom level for the current set of clusters.
+ */
+ private float mZoom;
+
+ private final ViewModifier mViewModifier = new ViewModifier();
+
+ private ClusterManager.OnClusterClickListener mClickListener;
+ private ClusterManager.OnClusterInfoWindowClickListener mInfoWindowClickListener;
+ private ClusterManager.OnClusterItemClickListener mItemClickListener;
+ private ClusterManager.OnClusterItemInfoWindowClickListener mItemInfoWindowClickListener;
+
+ public DefaultClusterRenderer(Context context, BaiduMap map, ClusterManager clusterManager) {
+ mMap = map;
+ mDensity = context.getResources().getDisplayMetrics().density;
+ mIconGenerator = new IconGenerator(context);
+ //给头像设置contentview,默认设置了textview
+// mIconGenerator.setContentView(makeSquareTextView(context));
+// mIconGenerator.setTextAppearance(R.style.ClusterIcon_TextAppearance);
+// mIconGenerator.setBackground(makeClusterBackground());
+ mClusterManager = clusterManager;
+ }
+
+ @Override
+ public void onAdd() {
+ mClusterManager.getMarkerCollection().setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ return mItemClickListener != null && mItemClickListener.onClusterItemClick(mMarkerCache.get(marker));
+ }
+ });
+
+
+ mClusterManager.getClusterMarkerCollection().setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ return mClickListener != null && mClickListener.onClusterClick(mMarkerToCluster.get(marker));
+ }
+ });
+
+ }
+
+ @Override
+ public void onRemove() {
+ mClusterManager.getMarkerCollection().setOnMarkerClickListener(null);
+ mClusterManager.getClusterMarkerCollection().setOnMarkerClickListener(null);
+ }
+
+ private LayerDrawable makeClusterBackground() {
+ mColoredCircleBackground = new ShapeDrawable(new OvalShape());
+ ShapeDrawable outline = new ShapeDrawable(new OvalShape());
+ outline.getPaint().setColor(0x80ffffff); // Transparent white.
+ LayerDrawable background = new LayerDrawable(new Drawable[]{outline, mColoredCircleBackground});
+ int strokeWidth = (int) (mDensity * 3);
+ background.setLayerInset(1, strokeWidth, strokeWidth, strokeWidth, strokeWidth);
+ return background;
+ }
+
+ private com.baidu.mapapi.clusterutil.ui.SquareTextView makeSquareTextView(Context context) {
+ com.baidu.mapapi.clusterutil.ui.SquareTextView squareTextView =
+ new com.baidu.mapapi.clusterutil.ui.SquareTextView(context);
+ ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ squareTextView.setLayoutParams(layoutParams);
+ squareTextView.setId(R.id.text);
+ int twelveDpi = (int) (12 * mDensity);
+ squareTextView.setPadding(twelveDpi, twelveDpi, twelveDpi, twelveDpi);
+ return squareTextView;
+ }
+
+ private int getColor(int clusterSize) {
+ final float hueRange = 220;
+ final float sizeRange = 300;
+ final float size = Math.min(clusterSize, sizeRange);
+ final float hue = (sizeRange - size) * (sizeRange - size) / (sizeRange * sizeRange) * hueRange;
+ return Color.HSVToColor(new float[]{
+ hue, 1f, .6f
+ });
+ }
+
+ protected String getClusterText(int bucket) {
+ if (bucket < BUCKETS[0]) {
+ return String.valueOf(bucket);
+ }
+ return String.valueOf(bucket) + "+";
+ }
+
+ /**
+ * Gets the "bucket" for a particular cluster. By default, uses the number of points within the
+ * cluster, bucketed to some set points.
+ */
+ protected int getBucket(Cluster cluster) {
+ int size = cluster.getSize();
+ if (size <= BUCKETS[0]) {
+ return size;
+ }
+ for (int i = 0; i < BUCKETS.length - 1; i++) {
+ if (size < BUCKETS[i + 1]) {
+ return BUCKETS[i];
+ }
+ }
+ return BUCKETS[BUCKETS.length - 1];
+ }
+
+ /**
+ * ViewModifier ensures only one re-rendering of the view occurs at a time, and schedules
+ * re-rendering, which is performed by the RenderTask.
+ */
+ @SuppressLint("HandlerLeak")
+ private class ViewModifier extends Handler {
+ private static final int RUN_TASK = 0;
+ private static final int TASK_FINISHED = 1;
+ private boolean mViewModificationInProgress = false;
+ private RenderTask mNextClusters = null;
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.what == TASK_FINISHED) {
+ mViewModificationInProgress = false;
+ if (mNextClusters != null) {
+ // Run the task that was queued up.
+ sendEmptyMessage(RUN_TASK);
+ }
+ return;
+ }
+ removeMessages(RUN_TASK);
+
+ if (mViewModificationInProgress) {
+ // Busy - wait for the callback.
+ return;
+ }
+
+ if (mNextClusters == null) {
+ // Nothing to do.
+ return;
+ }
+
+ RenderTask renderTask;
+ synchronized (this) {
+ renderTask = mNextClusters;
+ mNextClusters = null;
+ mViewModificationInProgress = true;
+ }
+
+ renderTask.setCallback(new Runnable() {
+ @Override
+ public void run() {
+ sendEmptyMessage(TASK_FINISHED);
+ }
+ });
+ renderTask.setProjection(mMap.getProjection());
+ renderTask.setMapZoom(mMap.getMapStatus().zoom);
+ new Thread(renderTask).start();
+ }
+
+ public void queue(Set extends Cluster> clusters) {
+ synchronized (this) {
+ // Overwrite any pending cluster tasks - we don't care about intermediate states.
+ mNextClusters = new RenderTask(clusters);
+ }
+ sendEmptyMessage(RUN_TASK);
+ }
+ }
+
+ /**
+ * Determine whether the cluster should be rendered as individual markers or a cluster.
+ */
+ protected boolean shouldRenderAsCluster(Cluster cluster) {
+ return cluster.getSize() >= MIN_CLUSTER_SIZE;
+ }
+
+ /**
+ * Transforms the current view (represented by DefaultClusterRenderer.mClusters and DefaultClusterRenderer.mZoom) to a
+ * new zoom level and set of clusters.
+ *
+ * This must be run off the UI thread. Work is coordinated in the RenderTask, then queued up to
+ * be executed by a MarkerModifier.
+ *
+ * There are three stages for the render:
+ *
+ * 1. Markers are added to the map
+ *
+ * 2. Markers are animated to their final position
+ *
+ * 3. Any old markers are removed from the map
+ *
+ * When zooming in, markers are animated out from the nearest existing cluster. When zooming
+ * out, existing clusters are animated to the nearest new cluster.
+ */
+ private class RenderTask implements Runnable {
+ final Set extends Cluster> clusters;
+ private Runnable mCallback;
+ private Projection mProjection;
+ private SphericalMercatorProjection mSphericalMercatorProjection;
+ private float mMapZoom;
+
+ private RenderTask(Set extends Cluster> clusters) {
+ this.clusters = clusters;
+ }
+
+ /**
+ * A callback to be run when all work has been completed.
+ *
+ * @param callback
+ */
+ public void setCallback(Runnable callback) {
+ mCallback = callback;
+ }
+
+ public void setProjection(Projection projection) {
+ this.mProjection = projection;
+ }
+
+ public void setMapZoom(float zoom) {
+ this.mMapZoom = zoom;
+ this.mSphericalMercatorProjection =
+ new SphericalMercatorProjection(256 * Math.pow(2, Math.min(zoom, mZoom)));
+ }
+
+ @SuppressLint("NewApi")
+ public void run() {
+ if (clusters.equals(DefaultClusterRenderer.this.mClusters)) {
+ mCallback.run();
+ return;
+ }
+
+ final MarkerModifier markerModifier = new MarkerModifier();
+
+ final float zoom = mMapZoom;
+ final boolean zoomingIn = zoom > mZoom;
+ final float zoomDelta = zoom - mZoom;
+
+ final Set markersToRemove = mMarkers;
+ final LatLngBounds visibleBounds = mMap.getMapStatus().bound;
+ // TODO: Add some padding, so that markers can animate in from off-screen.
+
+ // Find all of the existing clusters that are on-screen. These are candidates for
+ // markers to animate from.
+ List existingClustersOnScreen = null;
+ if (DefaultClusterRenderer.this.mClusters != null && SHOULD_ANIMATE) {
+ existingClustersOnScreen = new ArrayList();
+ for (Cluster c : DefaultClusterRenderer.this.mClusters) {
+ if (shouldRenderAsCluster(c) && visibleBounds.contains(c.getPosition())) {
+ Point point = mSphericalMercatorProjection.toPoint(c.getPosition());
+ existingClustersOnScreen.add(point);
+ }
+ }
+ }
+
+ // Create the new markers and animate them to their new positions.
+ final Set newMarkers = Collections.newSetFromMap(
+ new ConcurrentHashMap());
+ for (Cluster c : clusters) {
+ boolean onScreen = visibleBounds.contains(c.getPosition());
+ if (zoomingIn && onScreen && SHOULD_ANIMATE) {
+ Point point = mSphericalMercatorProjection.toPoint(c.getPosition());
+ Point closest = findClosestCluster(existingClustersOnScreen, point);
+ if (closest != null) {
+ LatLng animateTo = mSphericalMercatorProjection.toLatLng(closest);
+ markerModifier.add(true, new CreateMarkerTask(c, newMarkers, animateTo));
+ } else {
+ markerModifier.add(true, new CreateMarkerTask(c, newMarkers, null));
+ }
+ } else {
+ markerModifier.add(onScreen, new CreateMarkerTask(c, newMarkers, null));
+ }
+ }
+
+ // Wait for all markers to be added.
+ markerModifier.waitUntilFree();
+
+ // Don't remove any markers that were just added. This is basically anything that had
+ // a hit in the MarkerCache.
+ markersToRemove.removeAll(newMarkers);
+
+ // Find all of the new clusters that were added on-screen. These are candidates for
+ // markers to animate from.
+ List newClustersOnScreen = null;
+ if (SHOULD_ANIMATE) {
+ newClustersOnScreen = new ArrayList();
+ for (Cluster c : clusters) {
+ if (shouldRenderAsCluster(c) && visibleBounds.contains(c.getPosition())) {
+ Point p = mSphericalMercatorProjection.toPoint(c.getPosition());
+ newClustersOnScreen.add(p);
+ }
+ }
+ }
+
+ // Remove the old markers, animating them into clusters if zooming out.
+ for (final MarkerWithPosition marker : markersToRemove) {
+ boolean onScreen = visibleBounds.contains(marker.position);
+ // Don't animate when zooming out more than 3 zoom levels.
+ // TODO: drop animation based on speed of device & number of markers to animate.
+ if (!zoomingIn && zoomDelta > -3 && onScreen && SHOULD_ANIMATE) {
+ final Point point = mSphericalMercatorProjection.toPoint(marker.position);
+ final Point closest = findClosestCluster(newClustersOnScreen, point);
+ if (closest != null) {
+ LatLng animateTo = mSphericalMercatorProjection.toLatLng(closest);
+ markerModifier.animateThenRemove(marker, marker.position, animateTo);
+ } else {
+ markerModifier.remove(true, marker.marker);
+ }
+ } else {
+ markerModifier.remove(onScreen, marker.marker);
+ }
+ }
+
+ markerModifier.waitUntilFree();
+
+ mMarkers = newMarkers;
+ DefaultClusterRenderer.this.mClusters = clusters;
+ mZoom = zoom;
+
+ mCallback.run();
+ }
+ }
+
+ @Override
+ public void onClustersChanged(Set extends Cluster> clusters) {
+ mViewModifier.queue(clusters);
+ }
+
+ @Override
+ public void setOnClusterClickListener(ClusterManager.OnClusterClickListener listener) {
+ mClickListener = listener;
+ }
+
+ @Override
+ public void setOnClusterInfoWindowClickListener(ClusterManager
+ .OnClusterInfoWindowClickListener listener) {
+ mInfoWindowClickListener = listener;
+ }
+
+ @Override
+ public void setOnClusterItemClickListener(ClusterManager.OnClusterItemClickListener listener) {
+ mItemClickListener = listener;
+ }
+
+ @Override
+ public void setOnClusterItemInfoWindowClickListener(ClusterManager
+ .OnClusterItemInfoWindowClickListener listener) {
+ mItemInfoWindowClickListener = listener;
+ }
+
+ private static double distanceSquared(Point a, Point b) {
+ return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
+ }
+
+ private static Point findClosestCluster(List markers, Point point) {
+ if (markers == null || markers.isEmpty()) {
+ return null;
+ }
+
+ // TODO: make this configurable.
+ double minDistSquared = MAX_DISTANCE_AT_ZOOM * MAX_DISTANCE_AT_ZOOM;
+ Point closest = null;
+ for (Point candidate : markers) {
+ double dist = distanceSquared(candidate, point);
+ if (dist < minDistSquared) {
+ closest = candidate;
+ minDistSquared = dist;
+ }
+ }
+ return closest;
+ }
+
+ /**
+ * Handles all markerWithPosition manipulations on the map. Work (such as adding, removing, or
+ * animating a markerWithPosition) is performed while trying not to block the rest of the app's
+ * UI.
+ */
+ @SuppressLint("HandlerLeak")
+ private class MarkerModifier extends Handler implements MessageQueue.IdleHandler {
+ private static final int BLANK = 0;
+
+ private final Lock lock = new ReentrantLock();
+ private final Condition busyCondition = lock.newCondition();
+
+ private Queue mCreateMarkerTasks = new LinkedList();
+ private Queue mOnScreenCreateMarkerTasks = new LinkedList();
+ private Queue mRemoveMarkerTasks = new LinkedList();
+ private Queue mOnScreenRemoveMarkerTasks = new LinkedList();
+ private Queue mAnimationTasks = new LinkedList();
+
+ /**
+ * Whether the idle listener has been added to the UI thread's MessageQueue.
+ */
+ private boolean mListenerAdded;
+
+ private MarkerModifier() {
+ super(Looper.getMainLooper());
+ }
+
+ /**
+ * Creates markers for a cluster some time in the future.
+ *
+ * @param priority whether this operation should have priority.
+ */
+ public void add(boolean priority, CreateMarkerTask c) {
+ lock.lock();
+ sendEmptyMessage(BLANK);
+ if (priority) {
+ mOnScreenCreateMarkerTasks.add(c);
+ } else {
+ mCreateMarkerTasks.add(c);
+ }
+ lock.unlock();
+ }
+
+ /**
+ * Removes a markerWithPosition some time in the future.
+ *
+ * @param priority whether this operation should have priority.
+ * @param m the markerWithPosition to remove.
+ */
+ public void remove(boolean priority, Marker m) {
+ lock.lock();
+ sendEmptyMessage(BLANK);
+ if (priority) {
+ mOnScreenRemoveMarkerTasks.add(m);
+ } else {
+ mRemoveMarkerTasks.add(m);
+ }
+ lock.unlock();
+ }
+
+ /**
+ * Animates a markerWithPosition some time in the future.
+ *
+ * @param marker the markerWithPosition to animate.
+ * @param from the position to animate from.
+ * @param to the position to animate to.
+ */
+ public void animate(MarkerWithPosition marker, LatLng from, LatLng to) {
+ lock.lock();
+ mAnimationTasks.add(new AnimationTask(marker, from, to));
+ lock.unlock();
+ }
+
+ /**
+ * Animates a markerWithPosition some time in the future, and removes it when the animation
+ * is complete.
+ *
+ * @param marker the markerWithPosition to animate.
+ * @param from the position to animate from.
+ * @param to the position to animate to.
+ */
+ public void animateThenRemove(MarkerWithPosition marker, LatLng from, LatLng to) {
+ lock.lock();
+ AnimationTask animationTask = new AnimationTask(marker, from, to);
+ animationTask.removeOnAnimationComplete(mClusterManager.getMarkerManager());
+ mAnimationTasks.add(animationTask);
+ lock.unlock();
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (!mListenerAdded) {
+ Looper.myQueue().addIdleHandler(this);
+ mListenerAdded = true;
+ }
+ removeMessages(BLANK);
+
+ lock.lock();
+ try {
+
+ // Perform up to 10 tasks at once.
+ // Consider only performing 10 remove tasks, not adds and animations.
+ // Removes are relatively slow and are much better when batched.
+ for (int i = 0; i < 10; i++) {
+ performNextTask();
+ }
+
+ if (!isBusy()) {
+ mListenerAdded = false;
+ Looper.myQueue().removeIdleHandler(this);
+ // Signal any other threads that are waiting.
+ busyCondition.signalAll();
+ } else {
+ // Sometimes the idle queue may not be called - schedule up some work regardless
+ // of whether the UI thread is busy or not.
+ // TODO: try to remove this.
+ sendEmptyMessageDelayed(BLANK, 10);
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ /**
+ * Perform the next task. Prioritise any on-screen work.
+ */
+ private void performNextTask() {
+ if (!mOnScreenRemoveMarkerTasks.isEmpty()) {
+ removeMarker(mOnScreenRemoveMarkerTasks.poll());
+ } else if (!mAnimationTasks.isEmpty()) {
+ mAnimationTasks.poll().perform();
+ } else if (!mOnScreenCreateMarkerTasks.isEmpty()) {
+ mOnScreenCreateMarkerTasks.poll().perform(this);
+ } else if (!mCreateMarkerTasks.isEmpty()) {
+ mCreateMarkerTasks.poll().perform(this);
+ } else if (!mRemoveMarkerTasks.isEmpty()) {
+ removeMarker(mRemoveMarkerTasks.poll());
+ }
+ }
+
+ private void removeMarker(Marker m) {
+ Cluster cluster = mMarkerToCluster.get(m);
+ mClusterToMarker.remove(cluster);
+ mMarkerCache.remove(m);
+ mMarkerToCluster.remove(m);
+ mClusterManager.getMarkerManager().remove(m);
+ }
+
+ /**
+ * @return true if there is still work to be processed.
+ */
+ public boolean isBusy() {
+ try {
+ lock.lock();
+ return !(mCreateMarkerTasks.isEmpty() && mOnScreenCreateMarkerTasks.isEmpty()
+ && mOnScreenRemoveMarkerTasks.isEmpty() && mRemoveMarkerTasks.isEmpty()
+ && mAnimationTasks.isEmpty());
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ /**
+ * Blocks the calling thread until all work has been processed.
+ */
+ public void waitUntilFree() {
+ while (isBusy()) {
+ // Sometimes the idle queue may not be called - schedule up some work regardless
+ // of whether the UI thread is busy or not.
+ // TODO: try to remove this.
+ sendEmptyMessage(BLANK);
+ lock.lock();
+ try {
+ if (isBusy()) {
+ busyCondition.await();
+ }
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ } finally {
+ lock.unlock();
+ }
+ }
+ }
+
+ @Override
+ public boolean queueIdle() {
+ // When the UI is not busy, schedule some work.
+ sendEmptyMessage(BLANK);
+ return true;
+ }
+ }
+
+ /**
+ * A cache of markers representing individual ClusterItems.
+ */
+ private static class MarkerCache {
+ private Map mCache = new HashMap();
+ private Map mCacheReverse = new HashMap();
+
+ public Marker get(T item) {
+ return mCache.get(item);
+ }
+
+ public T get(Marker m) {
+ return mCacheReverse.get(m);
+ }
+
+ public void put(T item, Marker m) {
+ mCache.put(item, m);
+ mCacheReverse.put(m, item);
+ }
+
+ public void remove(Marker m) {
+ T item = mCacheReverse.get(m);
+ mCacheReverse.remove(m);
+ mCache.remove(item);
+ }
+ }
+
+ /**
+ * Called before the marker for a ClusterItem is added to the map.
+ */
+ protected void onBeforeClusterItemRendered(T item, MarkerOptions markerOptions) {
+ }
+
+ /**
+ * Called before the marker for a Cluster is added to the map.
+ * The default implementation draws a circle with a rough count of the number of items.
+ */
+ protected void onBeforeClusterRendered(Cluster cluster, MarkerOptions markerOptions) {
+ int bucket = getBucket(cluster);
+ BitmapDescriptor descriptor = mIcons.get(bucket);
+ if (descriptor == null) {
+// mColoredCircleBackground.getPaint().setColor(getColor(bucket));
+ descriptor = BitmapDescriptorFactory.fromBitmap(mIconGenerator.makeIcon(getClusterText(bucket)));
+ mIcons.put(bucket, descriptor);
+ }
+ // TODO: consider adding anchor(.5, .5) (Individual markers will overlap more often)
+ markerOptions.icon(descriptor);
+ }
+
+ /**
+ * Called after the marker for a Cluster has been added to the map.
+ */
+ protected void onClusterRendered(Cluster cluster, Marker marker) {
+ }
+
+ /**
+ * Called after the marker for a ClusterItem has been added to the map.
+ */
+ protected void onClusterItemRendered(T clusterItem, Marker marker) {
+ }
+
+ /**
+ * Get the marker from a ClusterItem
+ *
+ * @param clusterItem ClusterItem which you will obtain its marker
+ * @return a marker from a ClusterItem or null if it does not exists
+ */
+ public Marker getMarker(T clusterItem) {
+ return mMarkerCache.get(clusterItem);
+ }
+
+ /**
+ * Get the marker from a Cluster
+ *
+ * @param cluster which you will obtain its marker
+ * @return a marker from a cluster or null if it does not exists
+ */
+ public Marker getMarker(Cluster cluster) {
+ return mClusterToMarker.get(cluster);
+ }
+
+ /**
+ * Get the ClusterItem from a marker
+ *
+ * @param marker which you will obtain its ClusterItem
+ * @return a ClusterItem from a marker or null if it does not exists
+ */
+ public T getClusterItem(Marker marker) {
+ return mMarkerCache.get(marker);
+ }
+
+ /**
+ * Get the Cluster from a marker
+ *
+ * @param marker which you will obtain its Cluster
+ * @return a Cluster from a marker or null if it does not exists
+ */
+ public Cluster getCluster(Marker marker) {
+ return mMarkerToCluster.get(marker);
+ }
+
+ /**
+ * Creates markerWithPosition(s) for a particular cluster, animating it if necessary.
+ */
+ private class CreateMarkerTask {
+ private final Cluster cluster;
+ private final Set newMarkers;
+ private final LatLng animateFrom;
+
+ /**
+ * @param c the cluster to render.
+ * @param markersAdded a collection of markers to append any created markers.
+ * @param animateFrom the location to animate the markerWithPosition from, or null if no
+ * animation is required.
+ */
+ public CreateMarkerTask(Cluster c, Set markersAdded, LatLng animateFrom) {
+ this.cluster = c;
+ this.newMarkers = markersAdded;
+ this.animateFrom = animateFrom;
+ }
+
+ private void perform(MarkerModifier markerModifier) {
+ // Don't show small clusters. Render the markers inside, instead.
+ if (!shouldRenderAsCluster(cluster)) {
+ for (T item : cluster.getItems()) {
+ Marker marker = mMarkerCache.get(item);
+ MarkerWithPosition markerWithPosition;
+ if (marker == null) {
+ MarkerOptions markerOptions = new MarkerOptions();
+ if (animateFrom != null) {
+ markerOptions.position(animateFrom);
+ markerOptions.icon(item.getBitmapDescriptor());
+ } else {
+ markerOptions.position(item.getPosition());
+ markerOptions.icon(item.getBitmapDescriptor());
+ }
+ onBeforeClusterItemRendered(item, markerOptions);
+ marker = mClusterManager.getMarkerCollection().addMarker(markerOptions);
+ markerWithPosition = new MarkerWithPosition(marker);
+ mMarkerCache.put(item, marker);
+ if (animateFrom != null) {
+ markerModifier.animate(markerWithPosition, animateFrom, item.getPosition());
+ }
+ } else {
+ markerWithPosition = new MarkerWithPosition(marker);
+ }
+ onClusterItemRendered(item, marker);
+ newMarkers.add(markerWithPosition);
+ }
+ return;
+ }
+
+ MarkerOptions markerOptions = new MarkerOptions()
+ .position(animateFrom == null ? cluster.getPosition() : animateFrom);
+
+ onBeforeClusterRendered(cluster, markerOptions);
+
+ Marker marker = mClusterManager.getClusterMarkerCollection().addMarker(markerOptions);
+ mMarkerToCluster.put(marker, cluster);
+ mClusterToMarker.put(cluster, marker);
+ MarkerWithPosition markerWithPosition = new MarkerWithPosition(marker);
+ if (animateFrom != null) {
+ markerModifier.animate(markerWithPosition, animateFrom, cluster.getPosition());
+ }
+ onClusterRendered(cluster, marker);
+ newMarkers.add(markerWithPosition);
+ }
+ }
+
+ /**
+ * A Marker and its position. Marker.getPosition() must be called from the UI thread, so this
+ * object allows lookup from other threads.
+ */
+ private static class MarkerWithPosition {
+ private final Marker marker;
+ private LatLng position;
+
+ private MarkerWithPosition(Marker marker) {
+ this.marker = marker;
+ position = marker.getPosition();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof MarkerWithPosition) {
+ return marker.equals(((MarkerWithPosition) other).marker);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return marker.hashCode();
+ }
+ }
+
+ private static final TimeInterpolator ANIMATION_INTERP = new DecelerateInterpolator();
+
+ /**
+ * Animates a markerWithPosition from one position to another. TODO: improve performance for
+ * slow devices (e.g. Nexus S).
+ */
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
+ private class AnimationTask extends AnimatorListenerAdapter implements ValueAnimator.AnimatorUpdateListener {
+ private final MarkerWithPosition markerWithPosition;
+ private final Marker marker;
+ private final LatLng from;
+ private final LatLng to;
+ private boolean mRemoveOnComplete;
+ private MarkerManager mMarkerManager;
+
+ private AnimationTask(MarkerWithPosition markerWithPosition, LatLng from, LatLng to) {
+ this.markerWithPosition = markerWithPosition;
+ this.marker = markerWithPosition.marker;
+ this.from = from;
+ this.to = to;
+ }
+
+ public void perform() {
+ ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
+ valueAnimator.setInterpolator(ANIMATION_INTERP);
+ valueAnimator.addUpdateListener(this);
+ valueAnimator.addListener(this);
+ valueAnimator.start();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (mRemoveOnComplete) {
+ Cluster cluster = mMarkerToCluster.get(marker);
+ mClusterToMarker.remove(cluster);
+ mMarkerCache.remove(marker);
+ mMarkerToCluster.remove(marker);
+ mMarkerManager.remove(marker);
+ }
+ markerWithPosition.position = to;
+ }
+
+ public void removeOnAnimationComplete(MarkerManager markerManager) {
+ mMarkerManager = markerManager;
+ mRemoveOnComplete = true;
+ }
+
+ @Override
+ public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ float fraction = valueAnimator.getAnimatedFraction();
+ double lat = (to.latitude - from.latitude) * fraction + from.latitude;
+ double lngDelta = to.longitude - from.longitude;
+
+ // Take the shortest path across the 180th meridian.
+ if (Math.abs(lngDelta) > 180) {
+ lngDelta -= Math.signum(lngDelta) * 360;
+ }
+ double lng = lngDelta * fraction + from.longitude;
+ LatLng position = new LatLng(lat, lng);
+ marker.setPosition(position);
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/MyClusterRenderer.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/MyClusterRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..591b393981dd1b90cdaf6c6d46e85125315394d8
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/clustering/view/MyClusterRenderer.java
@@ -0,0 +1,158 @@
+package com.baidu.mapapi.clusterutil.clustering.view;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.baidu.mapapi.clusterutil.clustering.Cluster;
+import com.baidu.mapapi.clusterutil.clustering.ClusterManager;
+import com.baidu.mapapi.map.BaiduMap;
+import com.baidu.mapapi.map.BitmapDescriptor;
+import com.baidu.mapapi.map.BitmapDescriptorFactory;
+import com.baidu.mapapi.map.MarkerOptions;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.activity.NearbyMapActivity;
+import com.jiuqi.elove.util.CommonUtil;
+import com.jiuqi.elove.util.EasyGlide;
+import com.jiuqi.elove.util.MyLayoutManager;
+import com.jiuqi.elove.util.SupportMultiScreenUtil;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+/**
+ * Created by jq on 2017/12/5.
+ */
+
+public class MyClusterRenderer extends DefaultClusterRenderer{
+
+ protected Context context;
+ protected static List mAList = new ArrayList<>();
+
+ public MyClusterRenderer(Context context, BaiduMap map, ClusterManager clusterManager) {
+ super(context, map, clusterManager);
+ this.context = context;
+ }
+
+ @Override
+ protected void onBeforeClusterRendered(Cluster cluster, MarkerOptions markerOptions) {
+ Collection mList = cluster.getItems();
+ Iterator iterator = mList.iterator();
+ int count = mList.size();
+ View view = LayoutInflater.from(context).inflate(R.layout.layout_locate_avatar_group,null);
+ SupportMultiScreenUtil.scale(view);
+ CircleImageView iv_first = (CircleImageView) view.findViewById(R.id.iv_first);
+ CircleImageView iv_second = (CircleImageView) view.findViewById(R.id.iv_second);
+ CircleImageView iv_third = (CircleImageView) view.findViewById(R.id.iv_third);
+ CircleImageView iv_fourth = (CircleImageView) view.findViewById(R.id.iv_fourth);
+ TextView tv_number = (TextView) view.findViewById(R.id.tv_number);
+// TextView tv_first = (TextView) view.findViewById(R.id.tv_first);
+// TextView tv_second = (TextView) view.findViewById(R.id.tv_second);
+// TextView tv_third = (TextView) view.findViewById(R.id.tv_third);
+// TextView tv_fourth = (TextView) view.findViewById(R.id.tv_fourth);
+ if(count>9){
+ tv_number.setText(9+"+");
+ }else{
+ tv_number.setText(count+"");
+ }
+ if (count == 1) {
+// String avatar1 = iterator.next().getModel().getAvatar();
+ Bitmap avatar1 = iterator.next().getBitmap();
+// CircleImageView circleImageView = new CircleImageView(context);
+// circleImageView.setImageBitmap(avatar1);
+// circleImageView.setImageAlpha(0);
+ iv_first.setVisibility(View.VISIBLE);
+ iv_second.setVisibility(View.GONE);
+ iv_third.setVisibility(View.GONE);
+ iv_fourth.setVisibility(View.GONE);
+ MyLayoutManager.setImageLayout(iv_first,1, CommonUtil.dip2px(context,25f),CommonUtil.dip2px(context,25f));
+// ll_first.addView(circleImageView);
+// EasyGlide.getInstance().showImageCircle(avatar1, iv_first);
+ iv_first.setImageBitmap(avatar1);
+ } else if (count == 2) {
+// String avatar1 = iterator.next().getModel().getAvatar();
+// String avatar2 = iterator.next().getModel().getAvatar();
+ Bitmap avatar1 = iterator.next().getBitmap();
+ Bitmap avatar2 = iterator.next().getBitmap();
+ iv_first.setVisibility(View.VISIBLE);
+ iv_second.setVisibility(View.VISIBLE);
+ iv_third.setVisibility(View.GONE);
+ iv_fourth.setVisibility(View.GONE);
+ int wh = CommonUtil.dip2px(context,12f);
+ MyLayoutManager.setImageLayout(iv_first,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_second,1,wh,wh);
+ iv_first.setImageBitmap(avatar1);
+ iv_second.setImageBitmap(avatar2);
+// EasyGlide.getInstance().showImageCircle(avatar1, iv_first);
+// EasyGlide.getInstance().showImageCircle(avatar2, iv_second);
+ } else if (count == 3) {
+// String avatar1 = iterator.next().getModel().getAvatar();
+// String avatar2 = iterator.next().getModel().getAvatar();
+// String avatar3 = iterator.next().getModel().getAvatar();
+ Bitmap avatar1 = iterator.next().getBitmap();
+ Bitmap avatar2 = iterator.next().getBitmap();
+ Bitmap avatar3 = iterator.next().getBitmap();
+ iv_first.setVisibility(View.GONE);
+ iv_second.setVisibility(View.VISIBLE);
+ iv_third.setVisibility(View.VISIBLE);
+ iv_fourth.setVisibility(View.VISIBLE);
+ int wh = CommonUtil.dip2px(context,11f);
+ MyLayoutManager.setImageLayout(iv_third,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_second,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_fourth,1,wh,wh);
+ iv_second.setImageBitmap(avatar1);
+ iv_third.setImageBitmap(avatar2);
+ iv_fourth.setImageBitmap(avatar3);
+// EasyGlide.getInstance().showImageCircle(avatar1, iv_fourth);
+// EasyGlide.getInstance().showImageCircle(avatar2, iv_second);
+// EasyGlide.getInstance().showImageCircle(avatar3, iv_third);
+ } else if (count > 3) {
+// String avatar1 = iterator.next().getModel().getAvatar();
+// String avatar2 = iterator.next().getModel().getAvatar();
+// String avatar3 = iterator.next().getModel().getAvatar();
+// String avatar4 = iterator.next().getModel().getAvatar();
+ Bitmap avatar1 = iterator.next().getBitmap();
+ Bitmap avatar2 = iterator.next().getBitmap();
+ Bitmap avatar3 = iterator.next().getBitmap();
+ Bitmap avatar4 = iterator.next().getBitmap();
+ iv_first.setVisibility(View.VISIBLE);
+ iv_second.setVisibility(View.VISIBLE);
+ iv_third.setVisibility(View.VISIBLE);
+ iv_fourth.setVisibility(View.VISIBLE);
+ int wh = CommonUtil.dip2px(context,10f);
+ MyLayoutManager.setImageLayout(iv_first,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_second,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_third,1,wh,wh);
+ MyLayoutManager.setImageLayout(iv_fourth,1,wh,wh);
+// EasyGlide.getInstance().showImageCircle(avatar1, iv_first);
+// EasyGlide.getInstance().showImageCircle(avatar2, iv_second);
+// EasyGlide.getInstance().showImageCircle(avatar3, iv_third);
+// EasyGlide.getInstance().showImageCircle(avatar4, iv_fourth);
+ iv_first.setImageBitmap(avatar1);
+ iv_second.setImageBitmap(avatar2);
+ iv_third.setImageBitmap(avatar3);
+ iv_fourth.setImageBitmap(avatar4);
+ }
+ BitmapDescriptor descriptor = BitmapDescriptorFactory.fromView(view);
+ if(descriptor!=null){
+ mAList.add(descriptor);
+ markerOptions.icon(descriptor);
+ }
+ }
+
+ public static void clearList(){
+ for(int i=0;i= minX && bounds.maxX <= maxX && bounds.minY >= minY && bounds.maxY <= maxY;
+ }
+
+ public boolean intersects(double minX, double maxX, double minY, double maxY) {
+ return minX < this.maxX && this.minX < maxX && minY < this.maxY && this.minY < maxY;
+ }
+
+ public boolean intersects(Bounds bounds) {
+ return intersects(bounds.minX, bounds.maxX, bounds.minY, bounds.maxY);
+ }
+
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/Point.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/Point.java
new file mode 100644
index 0000000000000000000000000000000000000000..962b56e437cbf781215ba6b1d6eaa43aef815233
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/Point.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.projection;
+
+public class Point {
+ public final double x;
+ public final double y;
+
+ public Point(double x, double y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ @Override
+ public String toString() {
+ return "Point{"
+ + "x=" + x
+ + ", y=" + y
+ + '}';
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/SphericalMercatorProjection.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/SphericalMercatorProjection.java
new file mode 100644
index 0000000000000000000000000000000000000000..3583a577f9967ee84cda235b2c5fd3e19dd1a4a4
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/projection/SphericalMercatorProjection.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+package com.baidu.mapapi.clusterutil.projection;
+
+
+import com.baidu.mapapi.model.LatLng;
+
+public class SphericalMercatorProjection {
+ final double mWorldWidth;
+
+ public SphericalMercatorProjection(final double worldWidth) {
+ mWorldWidth = worldWidth;
+ }
+
+ @SuppressWarnings("deprecation")
+ public Point toPoint(final LatLng latLng) {
+ final double x = latLng.longitude / 360 + .5;
+ final double siny = Math.sin(Math.toRadians(latLng.latitude));
+ final double y = 0.5 * Math.log((1 + siny) / (1 - siny)) / -(2 * Math.PI) + .5;
+
+ return new Point(x * mWorldWidth, y * mWorldWidth);
+ }
+
+ public LatLng toLatLng(Point point) {
+ final double x = point.x / mWorldWidth - 0.5;
+ final double lng = x * 360;
+
+ double y = .5 - (point.y / mWorldWidth);
+ final double lat = 90 - Math.toDegrees(Math.atan(Math.exp(-y * 2 * Math.PI)) * 2);
+
+ return new LatLng(lat, lng);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/quadtree/PointQuadTree.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/quadtree/PointQuadTree.java
new file mode 100644
index 0000000000000000000000000000000000000000..20ba122ca8d37921c7235377d375acf3bfc34b25
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/quadtree/PointQuadTree.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.quadtree;
+
+
+import com.baidu.mapapi.clusterutil.projection.Bounds;
+import com.baidu.mapapi.clusterutil.projection.Point;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * A quad tree which tracks items with a Point geometry.
+ * See http://en.wikipedia.org/wiki/Quadtree for details on the data structure.
+ * This class is not thread safe.
+ */
+public class PointQuadTree {
+
+ /**
+ * The bounds of this quad.
+ */
+ private final Bounds mBounds;
+
+ /**
+ * The depth of this quad in the tree.
+ */
+ private final int mDepth;
+
+ /**
+ * Maximum number of elements to store in a quad before splitting.
+ */
+ private static final int MAX_ELEMENTS = 50;
+
+ /**
+ * The elements inside this quad, if any.
+ */
+ private List mItems;
+
+ /**
+ * Maximum depth.
+ */
+ private static final int MAX_DEPTH = 40;
+
+ /**
+ * Child quads.
+ */
+ private List> mChildren = null;
+
+ /**
+ * Creates a new quad tree with specified bounds.
+ *
+ * @param minX
+ * @param maxX
+ * @param minY
+ * @param maxY
+ */
+ public PointQuadTree(double minX, double maxX, double minY, double maxY) {
+ this(new Bounds(minX, maxX, minY, maxY));
+ }
+
+ public PointQuadTree(Bounds bounds) {
+ this(bounds, 0);
+ }
+
+ private PointQuadTree(double minX, double maxX, double minY, double maxY, int depth) {
+ this(new Bounds(minX, maxX, minY, maxY), depth);
+ }
+
+ private PointQuadTree(Bounds bounds, int depth) {
+ mBounds = bounds;
+ mDepth = depth;
+ }
+
+ /**
+ * Insert an item.
+ */
+ public void add(T item) {
+ Point point = item.getPoint();
+ if (this.mBounds.contains(point.x, point.y)) {
+ insert(point.x, point.y, item);
+ }
+ }
+
+ private void insert(double x, double y, T item) {
+ if (this.mChildren != null) {
+ // 四个区域进行控制
+ if (y < mBounds.midY) {
+ if (x < mBounds.midX) { // top left
+ mChildren.get(0).insert(x, y, item);
+ } else { // top right
+ mChildren.get(1).insert(x, y, item);
+ }
+ } else {
+ if (x < mBounds.midX) { // bottom left
+ mChildren.get(2).insert(x, y, item);
+ } else {
+ mChildren.get(3).insert(x, y, item);
+ }
+ }
+ return;
+ }
+ if (mItems == null) {
+ mItems = new ArrayList();
+ }
+ mItems.add(item);
+ if (mItems.size() > MAX_ELEMENTS && mDepth < MAX_DEPTH) {
+ split();
+ }
+ }
+
+ /**
+ * Split this quad.
+ */
+ private void split() {
+ mChildren = new ArrayList>(4);
+ mChildren.add(new PointQuadTree(mBounds.minX, mBounds.midX, mBounds.minY, mBounds.midY, mDepth + 1));
+ mChildren.add(new PointQuadTree(mBounds.midX, mBounds.maxX, mBounds.minY, mBounds.midY, mDepth + 1));
+ mChildren.add(new PointQuadTree(mBounds.minX, mBounds.midX, mBounds.midY, mBounds.maxY, mDepth + 1));
+ mChildren.add(new PointQuadTree(mBounds.midX, mBounds.maxX, mBounds.midY, mBounds.maxY, mDepth + 1));
+
+ List items = mItems;
+ mItems = null;
+
+ for (T item : items) {
+ // re-insert items into child quads.
+ insert(item.getPoint().x, item.getPoint().y, item);
+ }
+ }
+
+ /**
+ * Remove the given item from the set.
+ *
+ * @return whether the item was removed.
+ */
+ public boolean remove(T item) {
+ Point point = item.getPoint();
+ if (this.mBounds.contains(point.x, point.y)) {
+ return remove(point.x, point.y, item);
+ } else {
+ return false;
+ }
+ }
+
+ private boolean remove(double x, double y, T item) {
+ if (this.mChildren != null) {
+ if (y < mBounds.midY) {
+ if (x < mBounds.midX) { // top left
+ return mChildren.get(0).remove(x, y, item);
+ } else { // top right
+ return mChildren.get(1).remove(x, y, item);
+ }
+ } else {
+ if (x < mBounds.midX) { // bottom left
+ return mChildren.get(2).remove(x, y, item);
+ } else {
+ return mChildren.get(3).remove(x, y, item);
+ }
+ }
+ }
+ else {
+ return mItems.remove(item);
+ }
+ }
+
+ /**
+ * Removes all points from the quadTree
+ */
+ public void clear() {
+ mChildren = null;
+ if (mItems != null) {
+ mItems.clear();
+ }
+ }
+
+ public interface Item {
+
+ public Point getPoint();
+
+ }
+
+ /**
+ * Search for all items within a given bounds.
+ */
+ public Collection search(Bounds searchBounds) {
+ final List results = new ArrayList();
+ search(searchBounds, results);
+ return results;
+ }
+
+ private void search(Bounds searchBounds, Collection results) {
+ if (!mBounds.intersects(searchBounds)) {
+ return;
+ }
+
+ if (this.mChildren != null) {
+ for (PointQuadTree quad : mChildren) {
+ quad.search(searchBounds, results);
+ }
+ } else if (mItems != null) {
+ if (searchBounds.contains(mBounds)) {
+ results.addAll(mItems);
+ } else {
+ for (T item : mItems) {
+ if (searchBounds.contains(item.getPoint())) {
+ results.add(item);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/IconGenerator.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/IconGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..806a74d59d7aa145c5fe03891985ca94e5511fa2
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/IconGenerator.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.ui;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.jiuqi.elove.R;
+
+/**
+ * IconGenerator generates icons that contain text (or custom content) within an info
+ * window-like shape.
+ *
+ * The icon {@link Bitmap}s generated by the factory should be used in conjunction with a {@link
+ * com.baidu.mapapi.map.BitmapDescriptorFactory}.
+ *
+ * This class is not thread safe.
+ */
+public class IconGenerator {
+ private final Context mContext;
+
+ private ViewGroup mContainer;
+ private RotationLayout mRotationLayout;
+ private TextView mTextView;
+// private View mContentView;
+
+ private int mRotation;
+
+ private float mAnchorU = 0.5f;
+ private float mAnchorV = 1f;
+
+ /**
+ * Creates a new IconGenerator with the default style.
+ */
+ public IconGenerator(Context context) {
+ mContext = context;
+ mContainer = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.text_bubble, null);
+ mRotationLayout = (RotationLayout) mContainer.getChildAt(0);
+ mTextView = (TextView) mContainer.findViewById(R.id.text);//自定义
+ mTextView = (TextView) mRotationLayout.findViewById(R.id.text);
+ setStyle(STYLE_DEFAULT);
+ }
+
+ /**
+ * Sets the text content, then creates an icon with the current style.
+ *
+ * @param text the text content to display inside the icon.
+ */
+ public Bitmap makeIcon(String text) {
+ if (mTextView != null) {
+ mTextView.setText(text);
+ }
+
+ return makeIcon();
+ }
+
+ /**
+ * Creates an icon with the current content and style.
+ *
+ * This method is useful if a custom view has previously been set, or if text content is not
+ * applicable.
+ */
+ public Bitmap makeIcon() {
+ int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+ mContainer.measure(measureSpec, measureSpec);
+
+ int measuredWidth = mContainer.getMeasuredWidth();
+ int measuredHeight = mContainer.getMeasuredHeight();
+
+ mContainer.layout(0, 0, measuredWidth, measuredHeight);
+
+ if (mRotation == 1 || mRotation == 3) {
+ measuredHeight = mContainer.getMeasuredWidth();
+ measuredWidth = mContainer.getMeasuredHeight();
+ }
+
+ Bitmap r = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888);
+ r.eraseColor(Color.TRANSPARENT);
+
+ Canvas canvas = new Canvas(r);
+
+ if (mRotation != 0) {
+ // do nothing
+ if (mRotation == 1) {
+ canvas.translate(measuredWidth, 0);
+ canvas.rotate(90);
+ } else if (mRotation == 2) {
+ canvas.rotate(180, measuredWidth / 2, measuredHeight / 2);
+ } else {
+ canvas.translate(0, measuredHeight);
+ canvas.rotate(270);
+ }
+ }
+ mContainer.draw(canvas);
+ return r;
+ }
+
+ /**
+ * Sets the child view for the icon.
+ *
+ * If the view contains a {@link TextView} with the id "text", operations such as {@link
+ * #setTextAppearance} and {@link #makeIcon(String)} will operate upon that {@link TextView}.
+ */
+ public void setContentView(View contentView) {
+ mRotationLayout.removeAllViews();
+ mRotationLayout.addView(contentView);
+// mContentView = contentView;源代码
+// mContentView = contentView;
+// final View view = mRotationLayout.findViewById(R.id.text);
+// mTextView = view instanceof TextView ? (TextView) view : null;
+ }
+
+ /**
+ * Rotates the contents of the icon.
+ *
+ * @param degrees the amount the contents should be rotated, as a multiple of 90 degrees.
+ */
+ public void setContentRotation(int degrees) {
+ mRotationLayout.setViewRotation(degrees);
+ }
+
+ /**
+ * Rotates the icon.
+ *
+ * @param degrees the amount the icon should be rotated, as a multiple of 90 degrees.
+ */
+ public void setRotation(int degrees) {
+ mRotation = ((degrees + 360) % 360) / 90;
+ }
+
+
+ /**
+ * @return u coordinate of the anchor, with rotation applied.
+ */
+ public float getAnchorU() {
+ return rotateAnchor(mAnchorU, mAnchorV);
+ }
+
+ /**
+ * @return v coordinate of the anchor, with rotation applied.
+ */
+ public float getAnchorV() {
+ return rotateAnchor(mAnchorV, mAnchorU);
+ }
+
+ /**
+ * Rotates the anchor around (u, v) = (0, 0).
+ */
+ private float rotateAnchor(float u, float v) {
+ switch (mRotation) {
+ case 0:
+ return u;
+ case 1:
+ return 1 - v;
+ case 2:
+ return 1 - u;
+ case 3:
+ return v;
+ default:
+ }
+ throw new IllegalStateException();
+ }
+
+ /**
+ * Sets the text color, size, style, hint color, and highlight color from the specified
+ * TextAppearance
resource.
+ *
+ * @param resid the identifier of the resource.
+ */
+ public void setTextAppearance(Context context, int resid) {
+ if (mTextView != null) {
+ mTextView.setTextAppearance(context, resid);
+ }
+ }
+
+ /**
+ * Sets the text color, size, style, hint color, and highlight color from the specified
+ * TextAppearance
resource.
+ *
+ * @param resid the identifier of the resource.
+ */
+ public void setTextAppearance(int resid) {
+ setTextAppearance(mContext, resid);
+ }
+
+ /**
+ * Sets the style of the icon. The style consists of a background and text appearance.
+ */
+ public void setStyle(int style) {
+ setTextAppearance(mContext, getTextStyle(style));
+ }
+
+ /**
+ * Set the background to a given Drawable, or remove the background.
+ *
+ * @param background the Drawable to use as the background, or null to remove the background.
+ */
+ @SuppressWarnings("deprecation")
+ // View#setBackgroundDrawable is compatible with pre-API level 16 (Jelly Bean).
+ public void setBackground(Drawable background) {
+ mContainer.setBackgroundDrawable(background);
+
+ // Force setting of padding.
+ // setBackgroundDrawable does not call setPadding if the background has 0 padding.
+ if (background != null) {
+ Rect rect = new Rect();
+ background.getPadding(rect);
+ mContainer.setPadding(rect.left, rect.top, rect.right, rect.bottom);
+ } else {
+ mContainer.setPadding(0, 0, 0, 0);
+ }
+ }
+
+ /**
+ * Sets the padding of the content view. The default padding of the content view (i.e. text
+ * view) is 5dp top/bottom and 10dp left/right.
+ *
+ * @param left the left padding in pixels.
+ * @param top the top padding in pixels.
+ * @param right the right padding in pixels.
+ * @param bottom the bottom padding in pixels.
+ */
+ public void setContentPadding(int left, int top, int right, int bottom) {
+// mContentView.setPadding(left, top, right, bottom);
+ }
+
+ public static final int STYLE_DEFAULT = 1;
+ public static final int STYLE_WHITE = 2;
+ public static final int STYLE_RED = 3;
+ public static final int STYLE_BLUE = 4;
+ public static final int STYLE_GREEN = 5;
+ public static final int STYLE_PURPLE = 6;
+ public static final int STYLE_ORANGE = 7;
+
+ private static int getStyleColor(int style) {
+ switch (style) {
+ default:
+ case STYLE_DEFAULT:
+ case STYLE_WHITE:
+ return 0xffffffff;
+ case STYLE_RED:
+ return 0xffcc0000;
+ case STYLE_BLUE:
+ return 0xff0099cc;
+ case STYLE_GREEN:
+ return 0xff669900;
+ case STYLE_PURPLE:
+ return 0xff9933cc;
+ case STYLE_ORANGE:
+ return 0xffff8800;
+ }
+ }
+
+ private static int getTextStyle(int style) {
+ switch (style) {
+ default:
+ case STYLE_DEFAULT:
+ case STYLE_WHITE:
+ return R.style.Bubble_TextAppearance_Dark;
+ case STYLE_RED:
+ case STYLE_BLUE:
+ case STYLE_GREEN:
+ case STYLE_PURPLE:
+ case STYLE_ORANGE:
+ return R.style.Bubble_TextAppearance_Light;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/RotationLayout.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/RotationLayout.java
new file mode 100644
index 0000000000000000000000000000000000000000..604db330ba00953b850934eac9c95c518295f875
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/RotationLayout.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.ui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+/**
+ * RotationLayout rotates the contents of the layout by multiples of 90 degrees.
+ *
+ * May not work with padding.
+ */
+public class RotationLayout extends FrameLayout {
+ private int mRotation;
+
+ public RotationLayout(Context context) {
+ super(context);
+ }
+
+ public RotationLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RotationLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (mRotation == 1 || mRotation == 3) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
+ } else {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+
+ /**
+ * @param degrees the rotation, in degrees.
+ */
+ public void setViewRotation(int degrees) {
+ mRotation = ((degrees + 360) % 360) / 90;
+ }
+
+
+ @Override
+ public void dispatchDraw(Canvas canvas) {
+ if (mRotation == 0) {
+ super.dispatchDraw(canvas);
+ return;
+ }
+
+ if (mRotation == 1) {
+ canvas.translate(getWidth(), 0);
+ canvas.rotate(90, getWidth() / 2, 0);
+ canvas.translate(getHeight() / 2, getWidth() / 2);
+ } else if (mRotation == 2) {
+ canvas.rotate(180, getWidth() / 2, getHeight() / 2);
+ } else {
+ canvas.translate(0, getHeight());
+ canvas.rotate(270, getWidth() / 2, 0);
+ canvas.translate(getHeight() / 2, -getWidth() / 2);
+ }
+
+ super.dispatchDraw(canvas);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/SquareTextView.java b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/SquareTextView.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f6a41d5ee68f6819e9ac7879a2167a443d0208d
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/baidu/mapapi/clusterutil/ui/SquareTextView.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
+ */
+
+package com.baidu.mapapi.clusterutil.ui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+public class SquareTextView extends TextView {
+ private int mOffsetTop = 0;
+ private int mOffsetLeft = 0;
+
+ public SquareTextView(Context context) {
+ super(context);
+ }
+
+ public SquareTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public SquareTextView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = getMeasuredWidth();
+ int height = getMeasuredHeight();
+ int dimension = Math.max(width, height);
+ if (width > height) {
+ mOffsetTop = width - height;
+ mOffsetLeft = 0;
+ } else {
+ mOffsetTop = 0;
+ mOffsetLeft = height - width;
+ }
+ setMeasuredDimension(dimension, dimension);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ canvas.translate(mOffsetLeft / 2, mOffsetTop / 2);
+ super.draw(canvas);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ABaseActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ABaseActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a3e9198e64bb1b7e01530b3b2c8845e11669591
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ABaseActivity.java
@@ -0,0 +1,413 @@
+package com.jiuqi.elove.activity;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.gyf.barlibrary.ImmersionBar;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.ActivityCollector;
+import com.jiuqi.elove.common.PermissionListener;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.StatusBarUtil;
+import com.jiuqi.elove.util.SupportMultiScreenUtil;
+import com.umeng.analytics.MobclickAgent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+
+/**
+ * 基类
+ * Created by dl on 2017/6/15
+ * ##########################
+ * toolbar的基础设置,点击返回
+ * 多屏幕适配
+ * 请求权限
+ * 展示string类信息的toast
+ * 设置沉浸式状态栏
+ * ##########################
+ */
+public class ABaseActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener{
+
+ /**
+ * 数据
+ */
+ //是否显示返回等按钮
+ public static final int MODE_BACK = 0;
+ public static final int MODE_DRAWER = 1;
+ public static final int MODE_NONE = 2;
+ public static final int MODE_HOME = 3;
+ public static final int MODE_TITLE = 4;
+ //是否需要添加状态栏高度且设置颜色
+ public static final int HEIGHT_NONE_DARK = 1;
+ public static final int HEIGHT_IS_DARK = 2;
+ public static final int HEIGHT_NONE_LIGHT = 3;
+ public static final int HEIGHT_REDBG_WHITEFONT = 4;
+ public static final int HEIGHT_REDBG_WHITEFONT_NOINPUT = 6;
+ public static final int HEIGHT_VIEW_LIGHT = 5;
+ public static int activityCount;//用于判断当前应用程序是否在前台
+ /**
+ * 工具
+ */
+ private static PermissionListener mListener;
+ protected Unbinder unbinder;
+ protected OkHttpUtil okHttpUtil = OkHttpUtil.getInstance();
+ /**
+ * 控件
+ */
+ protected Toolbar toolbar;
+ protected TextView toolbar_title;
+ protected View rootView;
+ protected View statusView;
+
+ /**
+ * 申请运行时权限
+ */
+ public static void requestRuntimePermission(String[] permissions,PermissionListener listener){
+ Activity topActivity = ActivityCollector.getTopActivity();
+ if(topActivity==null){
+ return;
+ }
+ mListener = listener;
+ if (mListener != null) {
+ List permissionList = new ArrayList<>();
+ for (String permission : permissions) {
+ if (ContextCompat.checkSelfPermission(topActivity, permission) != PackageManager.PERMISSION_GRANTED) {
+ permissionList.add(permission);
+ }
+ }
+ if (!permissionList.isEmpty()) {
+ ActivityCompat.requestPermissions(topActivity, permissionList.toArray(new String[permissionList.size()]), 1);
+// ActivityCompat.requestPermissions(topActivity,(String[])permissionList.toArray(),1);
+ } else {
+ mListener.onGranted();
+ }
+ }
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ ActivityCollector.addActivity(this);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ ++activityCount;
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ --activityCount;
+ }
+
+ @Override
+ public void setContentView(@LayoutRes int layoutResID) {
+ setContentView(layoutResID,-1,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ }
+
+ public void setContentView(int layoutResID,int titleResID){
+ setContentView(layoutResID, titleResID,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ }
+
+ public void setContentView(int layoutResID,String title){
+ setContentView(layoutResID, title,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ }
+
+ public void setContentView(int layoutResID,int titleResID,int mode,int status){
+ setContentView(layoutResID, titleResID,-1, mode,status);
+ }
+
+ public void setContentView(int layoutResID,String title,int menuID,int mode,int status){
+ super.setContentView(layoutResID);
+ supportMultiScreen();//多屏幕适配
+ setUpToolbar(title,menuID,mode);
+ unbinder = ButterKnife.bind(this);//绑定
+ //设置全屏并且设置状态栏颜色为黑色,之前只有特殊的页面才用全屏手动添加状态栏,
+ //但是由于产品主题色为白色需要设置状态栏字体为黑色,而有一些系统无法更改深色,
+ //在不支持更改颜色的手机上将状态栏加上透明度0.2f
+ if(HEIGHT_IS_DARK==status){//主题色为白色,全屏,状态栏改为黑色如果不支持加上透明状态栏保证状态栏字体可以看到,3.0.1因为变成了红色,所以不需要将状态栏改为黑色了,去掉了tatusBarDarkFont(true,0.2f)
+ ImmersionBar.with(this).statusBarColor(R.color.white).statusBarDarkFont(true,0.2f).fitsSystemWindows(true).init();
+ }else if(HEIGHT_REDBG_WHITEFONT==status){
+ ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).keyboardEnable(true).init();
+ }else if(HEIGHT_REDBG_WHITEFONT_NOINPUT==status){
+ ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).init();
+ }else if(HEIGHT_NONE_DARK==status){
+ ImmersionBar.with(this).statusBarDarkFont(true,0.2f).keyboardEnable(true).init();
+ }else if(HEIGHT_NONE_LIGHT==status){
+ ImmersionBar.with(this).keyboardEnable(true).init();
+ }else if(HEIGHT_VIEW_LIGHT==status){
+ statusView = easyFind(R.id.status_view);
+ StatusBarUtil.setStatusView(statusView,true);
+ ImmersionBar.with(this).statusBarView(statusView).init();
+ }
+ }
+
+ public void setContentView(int layoutResID,int titleResID,int menuID,int mode,int status){
+ super.setContentView(layoutResID);
+ supportMultiScreen();//多屏幕适配
+ setUpToolbar(titleResID,menuID,mode);
+ unbinder = ButterKnife.bind(this);//绑定
+ //设置全屏并且设置状态栏颜色为黑色,之前只有特殊的页面才用全屏手动添加状态栏,
+ //但是由于产品主题色为白色需要设置状态栏字体为黑色,而有一些系统无法更改深色,
+ //在不支持更改颜色的手机上将状态栏加上透明度0.2f
+ if(HEIGHT_IS_DARK==status){
+ ImmersionBar.with(this).statusBarColor(R.color.colorPrimaryDark).statusBarDarkFont(true,0.2f).fitsSystemWindows(true).init();
+ }else if(HEIGHT_NONE_DARK==status){
+ ImmersionBar.with(this).statusBarDarkFont(true,0.2f).keyboardEnable(true).init();
+ }else if(HEIGHT_NONE_LIGHT==status){
+ ImmersionBar.with(this).keyboardEnable(true).init();
+ }else if(HEIGHT_REDBG_WHITEFONT==status){
+ ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).keyboardEnable(true).init();
+ }else if(HEIGHT_REDBG_WHITEFONT_NOINPUT==status){
+ ImmersionBar.with(this).statusBarColor(R.color.login_register).fitsSystemWindows(true).keyboardEnable(true).init();
+ }
+ }
+
+ /**
+ * 多屏幕适配
+ */
+ private void supportMultiScreen() {
+ rootView = easyFind(android.R.id.content);
+ SupportMultiScreenUtil.scale(rootView);
+ }
+
+ /**
+ * 设置toolbar
+ * @param titleResID 标题
+ * @param menuID 菜单栏
+ * @param mode 显示模式
+ */
+ protected void setUpToolbar(int titleResID, int menuID, int mode) {
+ if(mode!=MODE_NONE){
+ toolbar = easyFind(R.id.toolbar);
+ toolbar_title = easyFind(R.id.toolbar_title);
+ if(mode!=-1){
+ if(mode==MODE_BACK){
+ toolbar.setNavigationIcon(R.drawable.icon_leftarrow_w);
+ }else{
+ toolbar.setNavigationIcon(mode);
+ }
+ }
+
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onNavigationClicked();
+ }
+ });
+ setUpTitle(titleResID);
+ setUpMenu(menuID);
+ }
+ }
+
+ /**
+ * 设置toolbar
+ * @param titleResID 标题
+ * @param menuID 菜单栏
+ * @param mode 显示模式
+ */
+ protected void setUpToolbar(String titleResID, int menuID, int mode) {
+ if(mode!=MODE_NONE){
+ toolbar = easyFind(R.id.toolbar);
+ toolbar_title = easyFind(R.id.toolbar_title);
+ if(mode!=-1){
+ if(mode==MODE_BACK){
+ toolbar.setNavigationIcon(R.drawable.icon_leftarrow_w);
+ }else{
+ toolbar.setNavigationIcon(mode);
+ }
+ }
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onNavigationClicked();
+ }
+ });
+ setUpTitle(titleResID);
+ setUpMenu(menuID);
+ }
+ }
+
+ /**
+ * 设置菜单栏
+ * @param menuID 菜单选项
+ */
+ protected void setUpMenu(int menuID) {
+ if(toolbar!=null){
+ toolbar.getMenu().clear();
+ if(menuID>0){
+ toolbar.inflateMenu(menuID);
+ toolbar.setOnMenuItemClickListener(this);
+ }
+ }
+ }
+
+ /**
+ * 点击导航按钮
+ */
+ protected void onNavigationClicked() {
+ finish();
+ }
+
+ /**
+ * 设置标题
+ * @param titleResID 标题资源
+ */
+ protected void setUpTitle(int titleResID) {
+ if(titleResID>0&&toolbar_title!=null){
+ toolbar_title.setText(titleResID);
+ }
+ }
+
+ /**
+ * 设置标题
+ * @param title 标题资源
+ */
+ protected void setUpTitle(String title) {
+ if(!TextUtils.isEmpty(title)&&toolbar_title!=null){
+ toolbar_title.setText(title);
+ }
+ }
+
+ /**
+ * findViewById简化版
+ * @param id
+ * @param
+ * @return
+ */
+ protected T easyFind(int id){
+ return (T)findViewById(id);
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ return false;
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if(grantResults.length>0){
+ List deniedPermissions = new ArrayList<>();
+ for(int i=0;i left && event.getX() < right && event.getY() > top && event.getY() < bottom) {
+ // 点击EditText的事件,忽略它。
+ return false;
+ } else {
+ return true;
+ }
+ }
+ // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
+ return false;
+ }
+
+ /**
+ * 多种隐藏软件盘方法的其中一种
+ *
+ * @param token
+ */
+ public void hideSoftInput(IBinder token) {
+ if (token != null) {
+ InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ MobclickAgent.onResume(this);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ MobclickAgent.onPause(this);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ActReportActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ActReportActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2751e2086c669239fb3f0040efc0215123b34c0
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ActReportActivity.java
@@ -0,0 +1,129 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+/**
+ * 活动举报页面
+ * Created by dl on 2016/8/5.
+ */
+public class ActReportActivity extends ABaseActivity{
+
+ private static final String TAG = "ActReportActivity";
+ /**
+ * 组件
+ */
+ @BindView(R.id.edt_report)
+ EditText edt_report;
+ @BindView(R.id.txt_num)
+ TextView txt_num;// 用来显示剩余字数
+ @BindView(R.id.tv_actTitle)
+ TextView tv_actTitle;//显示举报活动的标题
+ @BindView(R.id.tv_right)
+ TextView tv_right;
+ @BindView(R.id.rl_right_tv)
+ RelativeLayout rl_right_tv;
+
+ /**
+ * 数据
+ */
+ private String actid;//活动ID
+ private String actTitle;// 举报活动标题
+ private String reportid;// 举报人ID
+ private int type;//类型0:企业活动1:个人活动
+ private int num = 300;//限制的最大字数
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_report,R.string.act_report);
+ getDataFromActDetailAndSp();
+ initView();
+ initEvent();
+ }
+
+ private void getDataFromActDetailAndSp() {
+ Intent intent = getIntent();
+ actid = intent.getStringExtra("actid");
+ type = Integer.parseInt(intent.getStringExtra("actType"));
+ actTitle = intent.getStringExtra("actTitle");
+ reportid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ private void initView() {
+ txt_num.setText(String.valueOf(num));
+ tv_actTitle.setText(actTitle);
+ tv_right.setText(getString(R.string.actreport_commit));
+ rl_right_tv.setVisibility(View.VISIBLE);
+ }
+
+ private void initEvent() {
+ edt_report.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ int number = num - s.length();
+ txt_num.setText(String.valueOf(number));
+ }
+ });
+ }
+
+ @OnClick(R.id.rl_right_tv)
+ public void OnClick(View view){
+ reportAct();
+ }
+
+ private void reportAct() {
+ String reportActUrl = Constant.COMMON_URL + Interface.ACT_REPORT;
+ JSONObject obj = new JSONObject();
+ String reason = edt_report.getText().toString().trim();
+ obj.put("actid",actid);
+ obj.put("reportid",reportid);
+ obj.put("reason",reason);
+ obj.put("type",type);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(ActReportActivity.this,true,reportActUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String retCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(retCode)){
+ finish();
+ }
+ JqStrUtil.showToast(ActReportActivity.this,explanation);
+ }
+ },null);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ okHttpUtil.cancelTag(this);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/AdvertisementActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/AdvertisementActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f9673f6d0fd6d846b0e738870de8716561f046e
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/AdvertisementActivity.java
@@ -0,0 +1,163 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.os.Environment;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.SpUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import butterknife.BindView;
+
+/**
+ * 最新3.30版本舍弃
+ */
+public class AdvertisementActivity extends ABaseActivity {
+
+ /**
+ * 控件
+ */
+ @BindView(R.id.skip_ad)
+ TextView skip_ad;
+ @BindView(R.id.img_ad)
+ ImageView img_ad;
+
+ /**
+ *数据
+ */
+ private int adtype;
+ private String adid;
+ private int time = 3;
+ private String adpic = "elove_ad.png";
+ private String flag = "1";
+ private String version;
+
+ /**
+ * 工具
+ */
+ private Timer timer = new Timer();
+ private TimerTask task;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_advertisement,-1,-1,MODE_NONE,HEIGHT_NONE_DARK);
+ getDataFromSp();
+ initEvent();
+ }
+
+ /**
+ * 从缓存中获取数据
+ */
+ private void getDataFromSp() {
+ adtype = SpUtils.getInt(Constant.AD_TYPE);
+ adid = SpUtils.getString(Constant.AD_ID);
+ version = SpUtils.getString(Constant.AD_VERSION);
+ }
+
+ /**
+ * 注册事件
+ */
+ private void initEvent() {
+ File f = new File(Environment.getExternalStorageDirectory()+ Constant.ELOVE_FILE_DIR+adpic);
+ if(f.exists()){
+ Bitmap b = getLoacalBitmap(Environment.getExternalStorageDirectory()+Constant.ELOVE_FILE_DIR+adpic);
+ img_ad.setImageBitmap(b);
+ }else{
+ Glide.with(this).load(R.drawable.first).into(img_ad);
+ }
+ skip_ad.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ startNextActivity();
+ finish();
+ }
+ });
+ img_ad.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent();
+ if(1==adtype){//活动
+ flag = "2";
+ if(JqStrUtil.isEmpty(adid)){
+ return;
+ }
+ timer.cancel();
+ intent.putExtra("actid",adid);
+ intent.setClass(AdvertisementActivity.this,EActDetailActivity2_0_3.class);
+ startActivity(intent);
+ }
+
+ }
+ });
+ task = new TimerTask() {
+ @Override
+ public void run() {
+ runOnUiThread(new Runnable() { // UI thread
+ @Override
+ public void run() {
+ if (time <= 0) {
+ task.cancel();
+ startNextActivity();
+ finish();
+ } else {//处理动态读秒
+
+ }
+ time--;
+ }
+ });
+ }
+ };
+ timer.schedule(task, 0, 1000);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if("2".equals(flag)){
+ startNextActivity();
+ }
+ }
+
+ /**
+ * 2.6版本一旦注册不在要求完善信息
+ */
+ private void startNextActivity(){
+ Intent intent = new Intent();
+ intent.setClass(AdvertisementActivity.this, MainActivity.class);
+ startActivity(intent);
+ finish();
+ overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
+
+ }
+ /**
+ * 加载本地图片
+ * http://bbs.3gstdy.com
+ * @param path
+ * @return
+ */
+ public static Bitmap getLoacalBitmap(String path) {
+ try {
+ FileInputStream fis = new FileInputStream(path);
+ return BitmapFactory.decodeStream(fis);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/BoundPhoneActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/BoundPhoneActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f0853de37f33fb37de76a2b253614dd36f14277
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/BoundPhoneActivity.java
@@ -0,0 +1,267 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+/**
+ *绑定手机页面
+ * Created by dl on 2016/9/23.
+ */
+public class BoundPhoneActivity extends ABaseActivity{
+
+ private static final String TAG = "BoundPhoneActivity";
+
+ /**
+ * 控件
+ */
+ @BindView(R.id.tv_tip)
+ TextView tv_tip;
+ @BindView(R.id.edt_phone)
+ EditText edt_phone;
+ @BindView(R.id.edt_code)
+ EditText edt_code;
+ @BindView(R.id.btn_getCode)
+ Button btn_getCode;
+ @BindView(R.id.btn_bound)
+ Button btn_bound;
+ /**
+ * 数据
+ */
+ //手机号
+ private String mobile = "";
+ private String userID;//用户ID
+ private String codetype;//5:三方登陆绑定手机号 7:旧手机号 9:新手机号
+ private String oldPhone;//是否有手机号
+ private String oldMobile;
+ private String title = "";//标题
+
+ /**
+ * 工具
+ */
+ private Timer mTimer = new Timer();
+ private TimerTask mTimerTask;
+ private int time = 60;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getDataFromPreAndSp();//前一页或者缓存中获取
+ setContentView(R.layout.activity_bound_phone,title);
+ initView();
+ }
+
+ /**
+ * 获取缓存和前一页中的数据
+ */
+ private void getDataFromPreAndSp() {
+ Intent intent = getIntent();
+ userID = SpUtils.getString(Constant.USER_ID);
+ oldPhone = intent.getStringExtra("pastPhone");
+ oldMobile = intent.getStringExtra("mobile");
+ }
+
+ /**
+ * 将获取到的数据初始化到ui中
+ */
+ private void initView() {
+ if(TextUtils.isEmpty(oldPhone)){
+ title = getString(R.string.binding_phonenum_title);
+ }else{
+ title = getString(R.string.verify_phone);
+ edt_phone.setText(oldPhone);
+ edt_phone.setSelection(oldPhone.length());//将光标追踪到内容的最后
+ mobile = oldPhone;
+ btn_bound.setText(getString(R.string.verify));
+ }
+ if(!TextUtils.isEmpty(oldMobile)){
+ tv_tip.setVisibility(View.VISIBLE);
+ edt_phone.setText(oldMobile);
+ mobile = oldMobile;
+ }
+ toolbar_title.setText(title);
+ }
+
+ @OnClick({R.id.btn_getCode,R.id.btn_bound})
+ public void OnClick(View view){
+ switch (view.getId()){
+ case R.id.btn_getCode:
+ if(!TextUtils.isEmpty(oldPhone)){
+ codetype = "6";
+ }else{
+ codetype = "5";
+ }
+ reqCode();
+ break;
+ case R.id.btn_bound:
+ if(!TextUtils.isEmpty(oldPhone)){
+ bound(1);
+ }else{
+ thirdLogin();
+ }
+ break;
+ }
+ }
+
+ /**
+ * 获取绑定手机验证码
+ */
+ private void reqCode() {
+ String codeUrl = Constant.COMMON_URL + Interface.GET_VERIFYCODE;
+ mobile = edt_phone.getText().toString().trim();
+ if(TextUtils.isEmpty(mobile)){
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.phonenum_input_prompt));
+ }else if(!JqStrUtil.isMobileNo(mobile)) {
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.phonenum_legal_input_prompt));
+ }else {
+ JSONObject obj = new JSONObject();
+ obj.put("userID",userID);
+ obj.put("mobilephone", mobile);
+ obj.put("action", codetype);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(BoundPhoneActivity.this, true, codeUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ time = 60;
+ mTimerTask = new TimerTask() {
+ @Override
+ public void run() {
+ runOnUiThread(new Runnable() { // UI thread
+ @Override
+ public void run() {
+ if(btn_getCode==null){
+ return;
+ }
+ btn_getCode.setEnabled(false);
+ if (time <= 0) {
+ btn_getCode.setEnabled(true);
+ btn_getCode.setText(getString(R.string.get_verifycode));
+ mTimerTask.cancel();
+ } else {
+ btn_getCode.setText("" + time + "秒后重发");
+ }
+ time--;
+ }
+ });
+ }
+ };
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if ("1".equals(rsCode)) {
+ mTimer.schedule(mTimerTask, 0, 1000);
+ JqStrUtil.showToast(BoundPhoneActivity.this, getString(R.string.check_get_verifycode));
+ } else {
+ JqStrUtil.showToast(BoundPhoneActivity.this, explanation);
+ }
+
+ }
+ }, null);
+ }
+ }
+
+ /**
+ * 第三方登录
+ */
+ private void thirdLogin() {
+ String phonecode = edt_code.getText().toString().trim();
+ String tmpMobile = edt_phone.getText().toString().trim();//修正不点击获取验证码直接点找回发生的请输入手机号错误提示
+ /**
+ * 1、if else 的方式,对于手机号来说,验证了即使是空,也会验证是否和获取验证码相同
+ * 如果此时未获取验证码,则之前手机号字符串为null,程序崩溃
+ * 2、校验应该根据顺序来,用户感觉上更舒适,也合理
+ */
+ if(TextUtils.isEmpty(tmpMobile)){
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.phonenum_input_prompt));
+ return;
+ }
+ if(!JqStrUtil.isMobileNo(tmpMobile)) {
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.phonenum_legal_input_prompt));
+ return;
+ }
+ if(TextUtils.isEmpty(phonecode)){
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.verifycode_input_prompt));
+ return;
+ }
+ if(!mobile.equals(tmpMobile)){
+ JqStrUtil.showToast(BoundPhoneActivity.this,getString(R.string.phonenum_accordant));
+ return;
+ }
+ Intent intent = new Intent();
+ intent.putExtra("phonecode", phonecode);
+ intent.putExtra("tmpMobile", tmpMobile);
+ setResult(0x01, intent);
+ finish();
+ }
+
+ /**
+ * 绑定
+ * @param action
+ */
+ private void bound(final int action) {
+ String thirdBoundUrl = Constant.COMMON_URL + Interface.THIRD_BOUND;
+ String phonecode = edt_code.getText().toString().trim();
+ final String tmpMobile = edt_phone.getText().toString().trim();//修正不点击获取验证码直接点找回发生的请输入手机号错误提示
+ JSONObject obj = new JSONObject();
+ obj.put("userID",userID);
+ obj.put("phone",tmpMobile);
+ obj.put("codetype",codetype);//
+ obj.put("action",action);//1:验证手机 4:绑定手机
+ obj.put("phonecode",phonecode);//1微信 2QQ 3微博
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(BoundPhoneActivity.this,true,thirdBoundUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ Log.d(TAG, "onResponse: "+rsCode);
+ if("1".equals(rsCode)){
+ if(action == 1 && "4".equals(jsonObject.getString("message"))){
+ //清空页面
+ edt_code.setText("");
+ edt_phone.setText("");
+ edt_phone.requestFocus();
+ btn_getCode.setEnabled(true);
+ btn_getCode.setText(getString(R.string.get_verifycode));
+ if(mTimerTask!=null){
+ mTimerTask.cancel();
+ }
+ codetype = "7";//验证码类型改为新手机对应类型
+ toolbar_title.setText(getString(R.string.binding_phonenum_title));
+ btn_bound.setText(getString(R.string.binding));
+ btn_bound.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ bound(4);
+ }
+ });
+ }else if(action == 4){
+ SpUtils.setString("mobilephone",tmpMobile);
+ finish();
+ }
+ }
+ JqStrUtil.showToast(BoundPhoneActivity.this, explanation);
+ }
+ },null);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..2cc680b3e4446392e2042dd981401782a10957f9
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureActivity.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2008 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.jiuqi.elove.activity;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.animation.Animation;
+import android.view.animation.TranslateAnimation;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.google.zxing.Result;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.widget.qrcode.camera.CameraManager;
+import com.jiuqi.elove.widget.qrcode.decode.DecodeThread;
+import com.jiuqi.elove.widget.qrcode.utils.BeepManager;
+import com.jiuqi.elove.widget.qrcode.utils.CaptureActivityHandler;
+import com.jiuqi.elove.widget.qrcode.utils.InactivityTimer;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+
+/**
+ * This activity opens the camera and does the actual scanning on a background
+ * thread. It draws a viewfinder to help the user place the barcode correctly,
+ * shows feedback as the image processing is happening, and then overlays the
+ * results when a scan is successful.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ * @author Sean Owen
+ */
+public final class CaptureActivity extends Activity implements SurfaceHolder.Callback {
+
+ private static final String TAG = CaptureActivity.class.getSimpleName();
+
+ private CameraManager cameraManager;
+ private CaptureActivityHandler handler;
+ private InactivityTimer inactivityTimer;
+ private BeepManager beepManager;
+
+ private SurfaceView scanPreview = null;
+ private RelativeLayout scanContainer;
+ private RelativeLayout scanCropView;
+ private ImageView scanLine;
+
+ private Rect mCropRect = null;
+ private boolean isHasSurface = false;
+
+ private ImageView tvBack;
+ private TextView tvTitle;
+
+ public Handler getHandler() {
+ return handler;
+ }
+
+ public CameraManager getCameraManager() {
+ return cameraManager;
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ setContentView(R.layout.activity_capture);
+
+ scanPreview = (SurfaceView) findViewById(R.id.capture_preview);
+ scanContainer = (RelativeLayout) findViewById(R.id.capture_container);
+ scanCropView = (RelativeLayout) findViewById(R.id.capture_crop_view);
+ scanLine = (ImageView) findViewById(R.id.capture_scan_line);
+ tvBack = (ImageView)findViewById(R.id.img_leftBtn);
+ tvTitle = (TextView)findViewById(R.id.tvTitle);
+ tvTitle.setText(R.string.scantitle);
+ tvBack.setVisibility(View.VISIBLE);
+
+ inactivityTimer = new InactivityTimer(this);
+ beepManager = new BeepManager(this);
+
+ TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation
+ .RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
+ 0.9f);
+ animation.setDuration(4500);
+ animation.setRepeatCount(-1);
+ animation.setRepeatMode(Animation.RESTART);
+ scanLine.startAnimation(animation);
+ //自定义事件
+ setEvents();
+ }
+
+ private void setEvents() {
+ tvBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // CameraManager must be initialized here, not in onCreate(). This is
+ // necessary because we don't
+ // want to open the camera driver and measure the screen size if we're
+ // going to show the help on
+ // first launch. That led to bugs where the scanning rectangle was the
+ // wrong size and partially
+ // off screen.
+ cameraManager = new CameraManager(getApplication());
+
+ handler = null;
+
+ if (isHasSurface) {
+ // The activity was paused but not stopped, so the surface still
+ // exists. Therefore
+ // surfaceCreated() won't be called, so init the camera here.
+ initCamera(scanPreview.getHolder());
+ } else {
+ // Install the callback and wait for surfaceCreated() to init the
+ // camera.
+ scanPreview.getHolder().addCallback(this);
+ }
+
+ inactivityTimer.onResume();
+ }
+
+ @Override
+ protected void onPause() {
+ if (handler != null) {
+ handler.quitSynchronously();
+ handler = null;
+ }
+ inactivityTimer.onPause();
+ beepManager.close();
+ cameraManager.closeDriver();
+ if (!isHasSurface) {
+ scanPreview.getHolder().removeCallback(this);
+ }
+ super.onPause();
+ }
+
+ @Override
+ protected void onDestroy() {
+ inactivityTimer.shutdown();
+ super.onDestroy();
+ }
+
+ @Override
+ public void surfaceCreated(SurfaceHolder holder) {
+ if (holder == null) {
+ Log.e(TAG, "*** WARNING *** surfaceCreated() gave us a null surface!");
+ }
+ if (!isHasSurface) {
+ isHasSurface = true;
+ initCamera(holder);
+ }
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder holder) {
+ isHasSurface = false;
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+
+ }
+
+ /**
+ * A valid barcode has been found, so give an indication of success and show
+ * the results.
+ *
+ * @param rawResult The contents of the barcode.
+ * @param bundle The extras
+ */
+ public void handleDecode(Result rawResult, Bundle bundle) {
+ inactivityTimer.onActivity();
+ beepManager.playBeepSoundAndVibrate();
+
+ Intent resultIntent = new Intent();
+ bundle.putInt("width", mCropRect.width());
+ bundle.putInt("height", mCropRect.height());
+ bundle.putString("result", rawResult.getText());
+ if(!JqStrUtil.isEmpty(rawResult.getText())&&rawResult.getText().startsWith("http://")||rawResult.getText().startsWith("https://")){
+ String url = rawResult.getText();
+ resultIntent.putExtra("url",url);
+ resultIntent.setClass(CaptureActivity.this,CaptureLoadWebActivity.class);
+ startActivity(resultIntent);
+ }else{
+ if(!JqStrUtil.isEmpty(rawResult.getText().trim())){
+ JqStrUtil.showToast(CaptureActivity.this,rawResult.getText());
+ }else{
+ JqStrUtil.showToast(CaptureActivity.this,"您扫描的二维码上演了空城计~二维码内无任何信息");
+ }
+ }
+
+// resultIntent.putExtras(bundle);QIYUAN_GROUP/272437911377412624
+
+
+// this.setResult(RESULT_OK, resultIntent);
+ CaptureActivity.this.finish();
+ }
+
+ private void initCamera(SurfaceHolder surfaceHolder) {
+ if (surfaceHolder == null) {
+ throw new IllegalStateException("No SurfaceHolder provided");
+ }
+ if (cameraManager.isOpen()) {
+ Log.w(TAG, "initCamera() while already open -- late SurfaceView callback?");
+ return;
+ }
+ try {
+ cameraManager.openDriver(surfaceHolder);
+ // Creating the handler starts the preview, which can also throw a
+ // RuntimeException.
+ if (handler == null) {
+ handler = new CaptureActivityHandler(this, cameraManager, DecodeThread.ALL_MODE);
+ }
+
+ initCrop();
+ } catch (IOException ioe) {
+ Log.w(TAG, ioe);
+ displayFrameworkBugMessageAndExit();
+ } catch (RuntimeException e) {
+ // Barcode Scanner has seen crashes in the wild of this variety:
+ // java.?lang.?RuntimeException: Fail to connect to camera service
+ Log.w(TAG, "Unexpected error initializing camera", e);
+ displayFrameworkBugMessageAndExit();
+ }
+ }
+
+ private void displayFrameworkBugMessageAndExit() {
+ // camera error
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.app_name));
+ builder.setMessage("请允许使用相机扫描");
+ builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+ }
+
+ });
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ });
+ builder.show();
+ }
+
+ public void restartPreviewAfterDelay(long delayMS) {
+ if (handler != null) {
+ handler.sendEmptyMessageDelayed(R.id.restart_preview, delayMS);
+ }
+ }
+
+ public Rect getCropRect() {
+ return mCropRect;
+ }
+
+ /**
+ * 初始化截取的矩形区域
+ */
+ private void initCrop() {
+ int cameraWidth = cameraManager.getCameraResolution().y;
+ int cameraHeight = cameraManager.getCameraResolution().x;
+
+ /** 获取布局中扫描框的位置信息 */
+ int[] location = new int[2];
+ scanCropView.getLocationInWindow(location);
+
+ int cropLeft = location[0];
+ int cropTop = location[1] - getStatusBarHeight();
+
+ int cropWidth = scanCropView.getWidth();
+ int cropHeight = scanCropView.getHeight();
+
+ /** 获取布局容器的宽高 */
+ int containerWidth = scanContainer.getWidth();
+ int containerHeight = scanContainer.getHeight();
+
+ /** 计算最终截取的矩形的左上角顶点x坐标 */
+ int x = cropLeft * cameraWidth / containerWidth;
+ /** 计算最终截取的矩形的左上角顶点y坐标 */
+ int y = cropTop * cameraHeight / containerHeight;
+
+ /** 计算最终截取的矩形的宽度 */
+ int width = cropWidth * cameraWidth / containerWidth;
+ /** 计算最终截取的矩形的高度 */
+ int height = cropHeight * cameraHeight / containerHeight;
+
+ /** 生成最终的截取的矩形 */
+ mCropRect = new Rect(x, y, width + x, height + y);
+ }
+
+ private int getStatusBarHeight() {
+ try {
+ Class> c = Class.forName("com.android.internal.R$dimen");
+ Object obj = c.newInstance();
+ Field field = c.getField("status_bar_height");
+ int x = Integer.parseInt(field.get(obj).toString());
+ return getResources().getDimensionPixelSize(x);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureLoadWebActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureLoadWebActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..e726d80dfdc5caf7197efa49be40802336cdac84
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CaptureLoadWebActivity.java
@@ -0,0 +1,102 @@
+package com.jiuqi.elove.activity;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.jiuqi.elove.R;
+
+public class CaptureLoadWebActivity extends Activity implements View.OnClickListener{
+
+ /*顶部菜单栏按钮*/
+ private TextView tvTitle;
+ private ImageView tvBack;
+ private WebView mWebView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ setContentView(R.layout.activity_capture_load_web);
+ initView();
+ initEvents();
+ }
+
+ private void initView() {
+ tvBack = (ImageView)findViewById(R.id.img_leftBtn);
+ tvTitle = (TextView)findViewById(R.id.tvTitle);
+ tvTitle.setText("网页");
+ tvBack.setVisibility(View.VISIBLE);
+ mWebView = (WebView) findViewById(R.id.wv_result);
+ WebSettings webSettings = mWebView.getSettings();
+ //设置WebView属性,能够执行Javascript脚本
+ webSettings.setJavaScriptEnabled(true);
+ //设置可以访问文件
+ webSettings.setAllowFileAccess(true);
+ //设置支持缩放
+ webSettings.setBuiltInZoomControls(true);
+ //加载需要显示的网页
+ String url = getIntent().getStringExtra("url");
+ if(url.startsWith("http://weixin")){
+ startWX();
+ }else if(url.startsWith("http://qm")){
+// startQQ();qq有问题
+ }
+ mWebView.loadUrl(url);
+ //设置Web视图
+ mWebView.setWebViewClient(new MyWebViewClient ());
+ }
+
+ private void initEvents(){
+ tvBack.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()){
+ case R.id.img_leftBtn:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+
+ //Web视图
+ private class MyWebViewClient extends WebViewClient {
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ view.loadUrl(url);
+ return true;
+ }
+ }
+
+ private void startWX(){
+ Intent intent = new Intent();
+ ComponentName cmp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.LauncherUI");
+ intent.setAction(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_LAUNCHER);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setComponent(cmp);
+ startActivity(intent);
+ finish();
+ }
+
+ private void startQQ() {
+ Intent intent = new Intent();
+ ComponentName cmp = new ComponentName("com.tencent.mobileqq","com.tencent.mobileqq.activity.HomeActivity");
+ intent.setAction(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_LAUNCHER);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setComponent(cmp);
+ startActivity(intent);
+ finish();
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterResultActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterResultActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c86d502f26fafd4bc278ed35352ea4f13a04301c
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterResultActivity.java
@@ -0,0 +1,424 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.Window;
+import android.view.animation.Animation;
+import android.view.animation.ScaleAnimation;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.github.mikephil.charting.animation.Easing;
+import com.github.mikephil.charting.charts.RadarChart;
+import com.github.mikephil.charting.components.Legend;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.RadarData;
+import com.github.mikephil.charting.data.RadarDataSet;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.CharacterModel;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.shareboard.SnsPlatform;
+import com.umeng.socialize.utils.ShareBoardlistener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CharacterResultActivity extends JqBaseActivity{
+
+ private static final String TAG = "CharacterResultActivity";
+ /**
+ * 控件
+ */
+ private TextView tvTitle;
+ private ImageView ivBack;
+ private ImageView ivMore;
+ private LinearLayout ll_findher;
+ private LinearLayout ll_result_content;
+ private TextView tv_prompt;
+ private String otherid;
+ /**
+ * 蛛网图相关
+ */
+ private RadarChart radarChart_mine;
+ public ArrayList x = new ArrayList();
+ public ArrayList y = new ArrayList();
+ public ArrayList ys1 = new ArrayList();
+ public ArrayList ys2 = new ArrayList();
+ public ArrayList ys3 = new ArrayList();
+ public ArrayList ys4 = new ArrayList();
+ public ArrayList radarDataSets = new ArrayList();
+ public RadarData radarData = null;
+ private TextView tv_radarChart_mine;
+ public ArrayList x1 = new ArrayList();
+ public ArrayList y1 = new ArrayList();
+ /**
+ * 数据
+ */
+ private String userid;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_character_result);
+ getDataFromSpAndPrePage();
+ initView();
+ getCharacterResult();
+ setEvents();
+ }
+
+ private void getDataFromSpAndPrePage() {
+ otherid = getIntent().getStringExtra("otherid");
+ userid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ private void getCharacterResult() {
+ String getResultUrl = Constant.COMMON_URL + Interface.VIEW_EMOTIONRESULT;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("otherid",otherid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(CharacterResultActivity.this, true, getResultUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if ("1".equals(rsCode)) {//成功
+ String uresultliststr = jsonObject.getString("uresultlist");
+ String oresultliststr = jsonObject.getString("oresultlist");
+ Log.d(TAG, "onResponse: " + uresultliststr);
+ if (!JqStrUtil.isEmpty(uresultliststr)&&JqStrUtil.isEmpty(oresultliststr)&&JqStrUtil.isEmpty(otherid)) {
+ List mList = JSON.parseArray(uresultliststr, CharacterModel.class);
+ if (mList != null && mList.size() > 0) {
+ tv_radarChart_mine.setVisibility(View.GONE);
+ radarChart_mine.setVisibility(View.VISIBLE);
+ dataIntoView(mList);
+ drawShape(mList,null);
+ } else {
+ tv_radarChart_mine.setVisibility(View.VISIBLE);
+ radarChart_mine.setVisibility(View.GONE);
+ tv_radarChart_mine.setText("未获取到数据");
+ }
+ }else if(!JqStrUtil.isEmpty(oresultliststr)){
+ List oList = JSON.parseArray(oresultliststr, CharacterModel.class);
+ if (oList != null && oList.size() > 0) {
+ tv_radarChart_mine.setVisibility(View.GONE);
+ radarChart_mine.setVisibility(View.VISIBLE);
+ dataIntoView(oList);
+ } else {
+ tv_radarChart_mine.setVisibility(View.VISIBLE);
+ radarChart_mine.setVisibility(View.GONE);
+ tv_radarChart_mine.setText("未获取到数据");
+ }
+ }
+ if(!JqStrUtil.isEmpty(uresultliststr)&&!JqStrUtil.isEmpty(oresultliststr)){
+ List mList = JSON.parseArray(uresultliststr, CharacterModel.class);
+ List oList = JSON.parseArray(oresultliststr, CharacterModel.class);
+ drawShape(mList,oList);
+ }
+ } else {
+ JqStrUtil.showToast(CharacterResultActivity.this, explanation);
+ }
+ }
+ }, new OkHttpUtil.OnUnGetJsonObject() {
+ @Override
+ public void onResponse() {
+ tv_radarChart_mine.setVisibility(View.VISIBLE);
+ radarChart_mine.setVisibility(View.GONE);
+ tv_radarChart_mine.setText("网络出错啦!");
+ }
+ });
+ }
+
+ private void dataIntoView(List mList) {
+ LinearLayout.LayoutParams lp = initLayoutParam();
+ int size = mList.size();
+ for(int i=0;i mList,List oList){
+ int size = mList.size();
+// radarData = getRadarData(size, mList);
+// if(null!=oList){
+// radarData1 = getRadarData(size,oList);
+// }
+ getRadarData(size,mList,oList);
+ showChart(radarData);
+// showChart(radarData1);
+ }
+
+ /**
+ * gv
+ * 初始化数据
+ * count 表示坐标点个数,range表示等下y值生成的范围
+ */
+ public void getRadarData(int count, List mList,List oList) {
+// ArrayList sets = new ArrayList();
+ for(int i=0;i0){
+ for (int i = 0; i < count; i++) { //X轴显示的数据
+// x.add(i + "");貌似这样做只是为了把他变成string类型的好保存
+ x.add(mList.get(i).getCharacter());
+ }
+ for (int i = 0; i < count; i++) {//y轴的数据
+ y.add(new Entry(mList.get(i).getCharacterscore(), i));
+ }
+// RadarDataSet radarDataSet = new RadarDataSet(y, "雷达图");//y轴数据集合
+ RadarDataSet radarDataSet = new RadarDataSet(y, null);//y轴数据集合
+ radarDataSet.setLineWidth(0);//线宽
+ radarDataSet.setColor(Color.rgb(254,78,119));//现实颜色
+// radarDataSet.setHighLightColor(Color.WHITE);//高度线的颜色
+// radarDataSet.setFillColor(R.color.colorPrimary);//设置填充颜色
+ radarDataSet.setFillAlpha(255);//设置透明度
+ radarDataSet.setDrawFilled(true);//设置显示填充颜色
+ radarDataSet.setDrawValues(false);//不显示该条目具体数值
+ radarDataSets.add(radarDataSet);
+// radarData = new RadarData(x, radarDataSets);
+ }
+ if(oList!=null&&oList.size()>0){
+ for (int i = 0; i < count; i++) { //X轴显示的数据
+// x.add(i + "");貌似这样做只是为了把他变成string类型的好保存
+ x1.add(oList.get(i).getCharacter());
+ }
+ for (int i = 0; i < count; i++) {//y轴的数据
+ y1.add(new Entry(oList.get(i).getCharacterscore(), i));
+ }
+// RadarDataSet radarDataSet = new RadarDataSet(y, "雷达图");//y轴数据集合
+ RadarDataSet radarDataSet1 = new RadarDataSet(y1, null);//y轴数据集合
+ radarDataSet1.setLineWidth(0);//线宽
+ radarDataSet1.setColor(Color.rgb(115,212,255));//现实颜色
+// radarDataSet.setHighLightColor(Color.WHITE);//高度线的颜色
+// radarDataSet1.setFillColor(Color.rgb(115,212,255));//设置填充颜色
+ radarDataSet1.setFillAlpha(150);//设置透明度
+ radarDataSet1.setDrawFilled(true);//设置显示填充颜色
+ radarDataSet1.setDrawValues(false);//不显示该条目具体数值
+ radarDataSets.add(radarDataSet1);
+// radarData1 = new RadarData(x1, radarDataSets1);
+ }
+ radarData = new RadarData(x, radarDataSets);
+ }
+
+ /**
+ * 设置样式
+ */
+ public void showChart(RadarData radarData) {
+ final ScaleAnimation animation =new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
+ Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
+ animation.setDuration(2000);
+ XAxis xAxis = radarChart_mine.getXAxis();
+ YAxis yAxis = radarChart_mine.getYAxis();
+ yAxis.setDrawLabels(false);//不显示每个图形的y轴代表的数据
+ yAxis.setAxisMaxValue(15f);//设置y轴最外侧代表的数据
+// yAxis.setStartAtZero(false);
+// yAxis.setYOffset(3f);
+// yAxis.setDrawGridLines(true);
+ xAxis.setSpaceBetweenLabels(5);//设置字和图形之间的距离
+ radarChart_mine.setRotationEnabled(false);//不可旋转
+ radarChart_mine.setDescription("");//数据描述
+ radarChart_mine.setWebColor(getResources().getColor(R.color.default_background));//角分边的颜色
+ radarChart_mine.setWebColorInner(getResources().getColor(R.color.hobby7));
+ radarChart_mine.setAnimation(animation);
+// radarChart_mine.animateX(3000, Easing.EasingOption.EaseInElastic); // 图1划线动作不好用
+// radarChart_mine.setSkipWebLineCount(1);
+ radarChart_mine.setData(radarData);//设置数据
+ radarChart_mine.invalidate();
+ radarChart_mine.animateXY(
+ 2000, 2000,
+ Easing.EasingOption.EaseInOutQuad,
+ Easing.EasingOption.EaseInOutQuad);
+ Legend legend = radarChart_mine.getLegend();//设置比例图片标示,就是那一组Y的value
+ legend.setEnabled(false);//设置无数据说明,即每种颜色的线条或者图形代表的选项
+// if(null!=radarData1){
+// radarChart_mine.setData(radarData1);//设置数据
+// }
+
+ }
+
+ private LinearLayout.LayoutParams initLayoutParam(){
+ LinearLayout ll = new LinearLayout(this);
+ ll.setOrientation(LinearLayout.HORIZONTAL);
+ ll.setPadding(0,50,0,50);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
+ return lp;
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ tv_prompt = easyFind(R.id.tv_prompt);
+ tvTitle.setText("性格分析");
+ ivBack = easyFind(R.id.img_leftBtn);
+ ivMore = easyFind(R.id.img_rightBtn);
+ ivMore.setImageResource(R.drawable.icon_share);
+ ivBack.setVisibility(View.VISIBLE);
+ ll_findher = easyFind(R.id.ll_findher);
+ ll_result_content = easyFind(R.id.ll_result_content);
+ radarChart_mine = easyFind(R.id.radarChart_mine);
+ tv_radarChart_mine = easyFind(R.id.tv_radarChart_mine);
+ if(!JqStrUtil.isEmpty(otherid)){
+ ivMore.setVisibility(View.GONE);
+ tv_prompt.setText("TA完成了测试,其实TA是......");
+ ll_findher.setVisibility(View.GONE);
+ }else{
+ ivMore.setVisibility(View.VISIBLE);
+ tv_prompt.setText("您完成了测试,其实您是......");
+ ll_findher.setVisibility(View.VISIBLE);
+ }
+ radarChart_mine.setVisibility(View.INVISIBLE);//防止网络请求中出现英文字样
+ radarChart_mine.setTouchEnabled(false);//防止与scrollview滑动冲突
+ }
+
+ private void setEvents() {
+ ivBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
+ ivMore.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ initUmengShare();//umeng平台分享配置初始化
+ }
+ });
+ ll_findher.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ findher();
+ }
+ });
+ }
+
+ private void findher() {
+ Intent intent = new Intent(CharacterResultActivity.this,FindYoursHerActivity.class);
+ startActivity(intent);
+ }
+
+ private void initUmengShare() {
+ UMImage image = new UMImage(CharacterResultActivity.this,
+ BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ ShareAction action = new ShareAction(this);
+ action.setDisplayList(Constant.DISPLAY_LIST);
+ action.withTitle("我的企缘情感测评报告,快来看看吧~");
+ action.withText("来自企缘App");
+ action.withTargetUrl(Constant.SHARE_QGCS+userid);//点击分享内容打开的链接
+ action.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ action.setShareboardclickCallback(mShareBoardlistener);//设置友盟集成的分享面板的点击监听回调
+ action.open();//打开集成的分享面板
+ }
+
+ /**
+ * 友盟分享面板PopupWindow监听器
+ */
+ private ShareBoardlistener mShareBoardlistener = new ShareBoardlistener() {
+
+ @Override
+ public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
+ UMImage image = new UMImage(CharacterResultActivity.this,
+ BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ ShareAction shareAction = new ShareAction(CharacterResultActivity.this);
+ shareAction.setPlatform(share_media);
+ shareAction.setCallback(mUmShareListener);//设置每个平台的点击事件
+ shareAction.withTitle("我的企缘情感测评报告,快来看看吧~");
+ shareAction.withText("来自企缘App");
+ shareAction.withTargetUrl(Constant.SHARE_QGCS+userid);//点击分享内容打开的链接
+ shareAction.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ shareAction.share();//发起分享,调起微信,QQ,微博客户端进行分享。
+ }
+ };
+// title在微博中无用,text在朋友圈中无用。但是加上也不影响分享。
+
+
+ /**
+ * 友盟分享后事件监听器
+ */
+ private UMShareListener mUmShareListener = new UMShareListener() {
+
+ @Override
+ public void onResult(SHARE_MEDIA platform) {
+ Toast.makeText(CharacterResultActivity.this,"分享成功",Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onError(SHARE_MEDIA platform, Throwable t) {
+ Toast.makeText(CharacterResultActivity.this,"分享失败",Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onCancel(SHARE_MEDIA platform) {
+// Toast.makeText(OtherPersonCenterActivity.this,"分享取消",Toast.LENGTH_LONG).show();
+ }
+ };
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterTestActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterTestActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c508fd847120f9b4f0b43d717ff8af77712b10b
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CharacterTestActivity.java
@@ -0,0 +1,247 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.View;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.CommonFragmentAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.QuestionModel;
+import com.jiuqi.elove.fragment.EmotionQuestionFragment;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.widget.NoScrollViewPager;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class CharacterTestActivity extends JqBaseActivity implements View.OnClickListener,EmotionQuestionFragment.MyListener{
+
+ private static final String TAG = "CharacterTestActivity";
+ /**
+ *控件
+ */
+ private TextView tvTitle;
+ private TextView tv_current_total;
+ private ImageView ivBack;
+ private ImageView iv_pre;
+ private ImageView iv_next;
+ private RelativeLayout rl_commit;
+ private TextView tv_commit;
+ private NoScrollViewPager mViewPager;
+ private LinearLayout ll_pre;
+ private LinearLayout ll_next;
+ /**
+ * 数据
+ */
+ private String userid;
+ private ArrayList fragmentlist;
+ private List mQuesionList;
+ private String flag;
+ private List> answerList;
+ private int currentPage;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_character_test);
+ answerList = new ArrayList<>();
+ getDataFromSp();
+ initView();
+ getEmotionList();
+ setEvents();
+ }
+
+ private void getDataFromSp() {
+ userid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ tv_current_total = easyFind(R.id.tv_current_total);
+ tvTitle.setText("我的测试");
+ ivBack = easyFind(R.id.img_leftBtn);
+ iv_pre = easyFind(R.id.iv_pre);
+ iv_next = easyFind(R.id.iv_next);
+ tv_commit = easyFind(R.id.tv_commit);
+ rl_commit = easyFind(R.id.rl_commit);
+ ivBack.setVisibility(View.VISIBLE);
+ mViewPager = easyFind(R.id.container);
+ mViewPager.setNoScroll(true);
+ ll_next = easyFind(R.id.ll_next);
+ ll_pre = easyFind(R.id.ll_pre);
+ }
+
+ private void getEmotionList() {
+ String emotionListUrl = Constant.COMMON_URL + Interface.EMOTION_LIST;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(CharacterTestActivity.this, true, emotionListUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ if("1".equals(rsCode)){
+ String result = jsonObject.getString("emotionlist");
+ mQuesionList = JSON.parseArray(result,QuestionModel.class);
+ createPage();
+ }
+ }
+ },null);
+ }
+
+ private void createPage() {
+ fragmentlist = new ArrayList<>();
+ for(int i=0;icurrentPage){
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mViewPager.setCurrentItem(currentPage+1);
+ judgeLastAndSetPageNo();
+ }
+ },100);
+ }
+ }
+ if("iv_pre".equals(flag)&¤tPage>0){
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mViewPager.setCurrentItem(currentPage-1);
+ judgeLastAndSetPageNo();
+ }
+ },100);
+ }
+
+ }
+
+ private void judgeLastAndSetPageNo(){
+ if(mViewPager.getCurrentItem()==mQuesionList.size()-1){
+ rl_commit.setVisibility(View.VISIBLE);
+ }else{
+ rl_commit.setVisibility(View.GONE);
+ }
+ setCurrentPage();
+ }
+
+ @Override
+ public void comfirmData(String answercode) {
+ HashMap map = new HashMap<>();
+ int currentPage = mViewPager.getCurrentItem();
+ map.put("testcode",mQuesionList.get(currentPage).getTestid());
+ map.put("answercode",answercode);
+ if(answerList.size()-1>=currentPage||answerList.size()==mQuesionList.size()){//大于等于
+ answerList.remove(currentPage);
+ }
+ answerList.add(currentPage,map);
+ flag = "iv_next";
+ changePage();
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChatActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChatActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..7758d03a8152a784dbbc3fc916d08584b20a61bd
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChatActivity.java
@@ -0,0 +1,51 @@
+package com.jiuqi.elove.activity;
+
+
+import android.os.Bundle;
+
+import com.hyphenate.easeui.EaseConstant;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.fragment.MyChatFragment;
+
+
+/**
+ * Created by dl on 2016/7/11.
+ * 继承BaseActivity,BaseActivity中继承了环信的基础activity,其中有一些操作
+ * 比如将通知栏的消息条数置为0
+ */
+public class ChatActivity extends ABaseActivity {
+
+ private static final String TAG = "ChatActivity";
+
+ public static ChatActivity activityInstance;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_chat,"",-1,MODE_NONE,HEIGHT_REDBG_WHITEFONT);
+ activityInstance = this;
+ initView();
+ }
+
+ private void initView() {
+ MyChatFragment chatFragment = new MyChatFragment();
+ String nikeName = getIntent().getStringExtra("nikeName");//个人昵称和群昵称(群昵称没有用其实也是id由环信方法获得)(title用)
+ String avatar = getIntent().getStringExtra("avatar");
+ String username = getIntent().getStringExtra("userId");//个人的id和群id,对方id
+ int chatType = getIntent().getIntExtra("chatType",900);
+ //传入参数
+ Bundle args = new Bundle();
+ args.putInt(EaseConstant.EXTRA_CHAT_TYPE, chatType);
+ args.putString(EaseConstant.EXTRA_USER_ID, username);
+ args.putString("nikename",nikeName);
+ args.putString("avatar",avatar);
+ chatFragment.setArguments(args);
+ getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ activityInstance = null;
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChoicenessDetailActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChoicenessDetailActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8d437556d325406232e97a09b105c9ba411ef6a
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChoicenessDetailActivity.java
@@ -0,0 +1,484 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.ChoicenessCommentAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.ChoicenessAndDetailModel;
+import com.jiuqi.elove.entity.ChoicenessCommentModel;
+import com.jiuqi.elove.fragment.ChoicenessFragment;
+import com.jiuqi.elove.util.BitmapUtils;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.widget.BottomScrollView;
+import com.jiuqi.elove.widget.ListViewForScrollView;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.shareboard.SnsPlatform;
+import com.umeng.socialize.utils.ShareBoardlistener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ChoicenessDetailActivity extends JqBaseActivity {
+
+ /**
+ * 控件
+ */
+ private TextView tvTitle;
+ private ImageView imgBack;
+ private ImageView imgShare;
+ private WebView wv_choicedetail;
+ private LinearLayout ll_webview;
+ private LinearLayout ll_comment;
+ private ListViewForScrollView lv_dcus;
+ private BottomScrollView bottom_scrollview;
+ private TextView tv_ismore;
+ private TextView tv_comment_count;
+ private ImageView iv_reward;
+ private EditText et_comment;
+ private TextView tv_sure;
+ private LinearLayout ll_reward;
+ /**
+ * 数据
+ */
+ private String userid;
+ private String creamid;//该精选的id
+ private String htmlStr;//html页面字符串
+ private String rewards;//打赏次数
+ private String reviews;//评论数
+ private String otherid;//被打赏id
+ private String scans;//阅读次数
+ private String contentstr;//标题
+ private String picture;//图片,用于分享图片
+ private List mlist;
+ private List mlistAdd;
+ private ChoicenessCommentAdapter adapter;
+ private int pageindex = 0;
+ private int pagesize = 10;
+ private StringBuilder sb;
+ private String title;
+ private ChoicenessAndDetailModel preModel;
+ private Bitmap pic;
+ /**
+ * 工具
+ */
+ private boolean isshow = false;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_choiceness_detail);
+ initView();
+ getDataFromSpAndPrepage();//从缓存和上一个页面获取数据,用于网络请求
+ initHtmlFromServer();//将html请求回来并显示到webview
+ adapter = new ChoicenessCommentAdapter(this);
+ lv_dcus.setAdapter(adapter);
+ mlistAdd = new ArrayList<>();
+ setEvents();//设置事件监听事件
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ imgBack = easyFind(R.id.img_leftBtn);
+ imgShare = easyFind(R.id.img_rightBtn);
+ wv_choicedetail = easyFind(R.id.wv_choicedetail);
+ ll_webview = easyFind(R.id.ll_webview);
+ ll_comment = easyFind(R.id.ll_comment);
+ lv_dcus = easyFind(R.id.lv_dcus);
+ tvTitle.setText("精选");
+ imgShare.setImageResource(R.drawable.icon_more_white);
+ imgBack.setVisibility(View.VISIBLE);
+ imgShare.setVisibility(View.VISIBLE);
+ bottom_scrollview = easyFind(R.id.bottom_scrollview);
+ tv_ismore = easyFind(R.id.tv_ismore);
+ tv_sure= easyFind(R.id.tv_sure);
+ tv_comment_count= easyFind(R.id.tv_comment_count);
+ iv_reward = easyFind(R.id.iv_reward);
+ et_comment = easyFind(R.id.et_comment);
+ ll_reward = easyFind(R.id.ll_reward);
+ }
+
+ private void getDataFromSpAndPrepage() {
+ SharedPreferences sp = getSharedPreferences("elove",MODE_PRIVATE);
+ userid = sp.getString("userid","");
+ creamid = getIntent().getStringExtra("id");
+ title = getIntent().getStringExtra("title");
+ preModel = (ChoicenessAndDetailModel) getIntent().getSerializableExtra("model");
+ }
+
+ /**
+ * 获取h5页面字符串;获取评论数和打赏数
+ */
+ private void initHtmlFromServer() {
+ final String htmlUrl = Constant.COMMON_URL + Interface.CHOICENESS_DETAIL;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("creamid",creamid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, false, htmlUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)){
+ String result = jsonObject.getString("message");
+ if(JqStrUtil.isEmpty(result)||"{}".equals(result)){
+ JqStrUtil.showToast(ChoicenessDetailActivity.this,"此文章已被删除");
+ }
+ JSONObject obj = JSON.parseObject(result);
+ rewards = obj.getString("rewards");
+ reviews = obj.getString("reviews");
+ htmlStr = obj.getString("creamhtml");
+ otherid = obj.getString("userid");
+ scans = obj.getString("scans");
+ contentstr = obj.getString("contentstr");
+ picture = obj.getString("picture");
+// title = obj.getString("title");
+ tv_comment_count.setText("所有评论("+reviews+")");
+ if(preModel!=null){
+ preModel.setScans(scans);//更新上个页面的model来展示
+ }
+ showActDetailWithHtml();//显示html页面的内容
+ new Thread(){
+ @Override
+ public void run() {
+ super.run();
+ pic = BitmapUtils.getBitMapFromUrl(picture);
+ }
+ }.start();
+ }else{
+ JqStrUtil.showToast(ChoicenessDetailActivity.this,explanation);
+ }
+ }
+ },null);
+ }
+
+ /***********************************************显示服务端返回的html字符串(关于活动具体介绍)********************************************/
+ private void showActDetailWithHtml(){
+ /**--------WebView样式设置-------------*/
+ /**
+ * 以下两个,防止出现Activity has leaked window android.widget.ZoomButtonsController$Container崩溃
+ */
+ // make sure your pinch zoom is enabled
+ wv_choicedetail.getSettings().setBuiltInZoomControls(true);
+ // don't show the zoom controls
+ wv_choicedetail.getSettings().setDisplayZoomControls(false);
+ //支持javascript
+ wv_choicedetail.getSettings().setJavaScriptEnabled(true);
+ // 设置可以支持缩放
+ wv_choicedetail.getSettings().setSupportZoom(true);
+ // 设置出现缩放工具
+ wv_choicedetail.getSettings().setBuiltInZoomControls(true);
+ //扩大比例的缩放
+ wv_choicedetail.getSettings().setUseWideViewPort(true);
+ //自适应屏幕
+ wv_choicedetail.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
+ wv_choicedetail.getSettings().setLoadWithOverviewMode(true);
+ //设置webview展示html的宽度方式
+// WebSettings webSettings =wv.getSettings();
+// webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
+ String encoding = "UTF-8";
+ String mimeType = "text/html";
+ if(!JqStrUtil.isEmpty(htmlStr)){
+ ll_webview.setVisibility(View.VISIBLE);
+ wv_choicedetail.loadDataWithBaseURL(null, htmlStr, mimeType, encoding, null);
+ wv_choicedetail.setWebViewClient(new MyWebViewClient());
+ }else{
+ ll_webview.setVisibility(View.GONE);
+ }
+ }
+
+ private class MyWebViewClient extends WebViewClient{
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ view.loadUrl(url);
+ return true;
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ ll_reward.setVisibility(View.GONE);
+ initReplyFromServer();//将评论列表请求回来并展示
+ }
+ }
+
+ /**
+ * 获取评论列表
+ */
+ private void initReplyFromServer() {
+ String replyUrl = Constant.COMMON_URL + Interface.CHOICENESS_COMMENT_LIST;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("creamid",creamid);
+ obj.put("version",Constant.VERSION);
+ obj.put("pageindex",pageindex);
+ obj.put("pagesize",pagesize);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, isshow, replyUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)){
+ String result = jsonObject.getString("commentlist");
+ mlist = JSON.parseArray(result,ChoicenessCommentModel.class);
+ mlistAdd.addAll(mlist);
+ if(mlistAdd.isEmpty()){
+ lv_dcus.setVisibility(View.GONE);
+ ll_comment.setVisibility(View.GONE);
+ tv_ismore.setVisibility(View.GONE);
+ }else{
+ ll_comment.setVisibility(View.VISIBLE);
+ lv_dcus.setVisibility(View.VISIBLE);
+ tv_ismore.setVisibility(View.VISIBLE);
+ adapter.updateListView(mlistAdd);
+ }
+ if(mlist.isEmpty()&&!mlistAdd.isEmpty()){
+ tv_ismore.setText("暂无更多评论");
+ }
+ }else{
+ JqStrUtil.showToast(ChoicenessDetailActivity.this,explanation);
+ }
+ }
+ },null);
+ }
+
+
+ private void setEvents() {
+ imgBack.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(preModel!=null){
+ Intent intent = new Intent();
+ intent.putExtra("newmodel",preModel);
+ setResult(0x11,intent);
+ }
+ finish();
+ }
+ });
+
+ bottom_scrollview.setOnScrollToBottomLintener(new BottomScrollView.OnScrollToBottomListener() {
+ @Override
+ public void onScrollBottomListener(boolean isBottom) {
+ if(isBottom){
+ ++pageindex;
+ isshow = false;
+ tv_ismore.setText("加载更多评论...");
+ initReplyFromServer();
+ }
+ }
+ });
+
+ tv_sure.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ commitComment();
+ }
+ });
+
+ iv_reward.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(!JqStrUtil.isEmpty(userid)&&userid.equals(otherid)){
+ JqStrUtil.showToast(ChoicenessDetailActivity.this,"不能打赏自己");
+ return;
+ }
+ Intent intent = new Intent(ChoicenessDetailActivity.this,RewardActivity.class);
+ intent.putExtra("otherid",otherid);
+ intent.putExtra("type","1");//精选文章打赏要用
+ intent.putExtra("titleid",creamid);
+ startActivity(intent);
+ }
+ });
+
+ imgShare.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ shareInfo();
+ }
+ });
+ }
+
+ private void commitComment() {
+ String commentUrl = Constant.COMMON_URL + Interface.CREATE_COMMENT;
+ String comment = et_comment.getText().toString().trim();
+ if(JqStrUtil.isEmpty(comment)){
+ JqStrUtil.showToast(this,"请先输入评论~");
+ return;
+ }
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("creamid",creamid);
+ obj.put("version",Constant.VERSION);
+ obj.put("comment",comment);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(ChoicenessDetailActivity.this, true, commentUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)){
+ reviews = String.valueOf(Integer.parseInt(reviews)+1);//评论成功次数加一
+ tv_comment_count.setText("所有评论("+reviews+")");
+ if(preModel!=null){
+ preModel.setReviews(String.valueOf(Integer.parseInt(preModel.getReviews())+1));//更新上个页面的model来展示
+ }
+ et_comment.setText("");
+ String result = jsonObject.getString("message");
+ ChoicenessCommentModel model = JSON.parseObject(result,ChoicenessCommentModel.class);
+ mlistAdd.add(0,model);
+ if(mlistAdd.isEmpty()){
+ lv_dcus.setVisibility(View.GONE);
+ ll_comment.setVisibility(View.GONE);
+ tv_ismore.setVisibility(View.GONE);
+ }else{
+ ll_comment.setVisibility(View.VISIBLE);
+ lv_dcus.setVisibility(View.VISIBLE);
+ tv_ismore.setVisibility(View.VISIBLE);
+ adapter.updateListView(mlistAdd);
+ }
+ }else{
+ JqStrUtil.showToast(ChoicenessDetailActivity.this,explanation);
+ }
+ }
+ },null);
+ }
+
+ private void shareInfo() {
+ initUmengShare();//umeng平台分享配置初始化
+ }
+ private void initUmengShare() {
+ UMImage image;
+ if(pic!=null){
+ image= new UMImage(ChoicenessDetailActivity.this,pic);
+ }else{
+ image = new UMImage(ChoicenessDetailActivity.this,
+ BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ }
+ ShareAction action = new ShareAction(this);
+ action.setDisplayList(Constant.DISPLAY_LIST);
+ action.withTitle(title);
+ action.withText(contentstr+"...");
+ action.withTargetUrl(Constant.SHARE_CHOICENESS_URL+creamid);//点击分享内容打开的链接
+ action.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ action.setShareboardclickCallback(mShareBoardlistener);//设置友盟集成的分享面板的点击监听回调
+ action.open();//打开集成的分享面板
+ }
+ /**
+ * 友盟分享面板PopupWindow监听器
+ */
+ private ShareBoardlistener mShareBoardlistener = new ShareBoardlistener() {
+
+ @Override
+ public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
+ UMImage image;
+ if(pic!=null){
+ image= new UMImage(ChoicenessDetailActivity.this,pic);
+ }else{
+ image = new UMImage(ChoicenessDetailActivity.this,
+ BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ }
+ ShareAction shareAction = new ShareAction(ChoicenessDetailActivity.this);
+ shareAction.setPlatform(share_media);
+ shareAction.setCallback(mUmShareListener);//设置每个平台的点击事件
+ shareAction.withTitle(title);
+ shareAction.withText(contentstr+"...");
+// sb = new StringBuilder();
+// sb.append(getString(R.string.act_share_time));
+// sb.append(startTime);
+// sb.append(getString(R.string.act_share_address));
+// sb.append(addressname);
+// shareAction.withText(sb.toString());
+ shareAction.withTargetUrl(Constant.SHARE_CHOICENESS_URL+creamid);//点击分享内容打开的链接
+ shareAction.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ shareAction.share();//发起分享,调起微信,QQ,微博客户端进行分享。
+ }
+ };
+ /**
+ * 友盟分享后事件监听器
+ */
+ private UMShareListener mUmShareListener = new UMShareListener() {
+ @Override
+ public void onResult(SHARE_MEDIA platform) {
+ shareSuccess();
+ }
+ @Override
+ public void onError(SHARE_MEDIA platform, Throwable t) {
+ Toast.makeText(ChoicenessDetailActivity.this,"分享失败",Toast.LENGTH_LONG).show();
+ }
+ @Override
+ public void onCancel(SHARE_MEDIA platform) {
+// Toast.makeText(EActDetailActivity2_0_3.this,"分享取消",Toast.LENGTH_LONG).show();
+ }
+ };
+
+ /**
+ * 分享成功回调服务器接口,用于增加个人的红豆数
+ */
+ private void shareSuccess() {
+ String shareUrl = Constant.COMMON_URL + Interface.SHARE_PERSON_ARTICLE;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("action",Constant.SHARE_ARTICLE);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, false, shareUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ Toast.makeText(ChoicenessDetailActivity.this,"分享成功",Toast.LENGTH_LONG).show();
+ }
+ },null);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0&&preModel!=null){
+ Intent intent = new Intent();
+ intent.putExtra("newmodel",preModel);
+ setResult(0x11,intent);
+ finish();
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if(wv_choicedetail!=null){
+ wv_choicedetail.removeAllViews();
+ wv_choicedetail.destroy();
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseLocateActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseLocateActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab20b0cd0c3bbc231ba66303b6c501b8dc70b021
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseLocateActivity.java
@@ -0,0 +1,242 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.baidu.location.BDLocation;
+import com.baidu.mapapi.model.LatLng;
+import com.baidu.mapapi.search.core.PoiInfo;
+import com.baidu.mapapi.search.geocode.GeoCodeResult;
+import com.baidu.mapapi.search.geocode.GeoCoder;
+import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
+import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
+import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.PoiAdapter;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.util.BdLocationHelper;
+
+import java.util.List;
+
+public class ChooseLocateActivity extends JqBaseActivity implements View.OnClickListener{
+
+ /**
+ * 控件
+ */
+// private PullToRefreshLayout locateRefresh;
+ private ListView lv_location_nearby;
+ private TextView tvTitle;
+ private ImageView imgBack;
+ private TextView tv_city;
+ /**
+ * 数据
+ */
+ private double latitude;//纬度
+ private double longitude;//经度
+ private String address;//地址,用于索引附近
+ private List mlist;
+// private List mAddlist;
+ /**
+ * 工具
+ */
+ private PoiAdapter adapter;
+// private PoiSearch poiSearch;
+// private PoiNearbySearchOption nearbySearchOption;
+ private BdLocationHelper helper;
+// private int pageNo = 0;
+ private final int ADDRESS_RESPONSE = 0X01;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_choose_locate);
+ initView();
+ initLocation();//定位起始位置
+ setEvents();
+ }
+
+ private void setEvents() {
+ imgBack.setOnClickListener(this);
+ lv_location_nearby.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
+ PoiInfo info = mlist.get(position);
+ Intent intent = new Intent();
+ intent.putExtra("address",info.name);
+ setResult(ADDRESS_RESPONSE,intent);
+ finish();
+ }
+ });
+// locateRefresh.setOnRefreshListener(this);
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ imgBack = easyFind(R.id.img_leftBtn);
+ imgBack.setVisibility(View.VISIBLE);
+ tvTitle.setText("所在位置");
+ lv_location_nearby = easyFind(R.id.lv_location_nearby);
+ tv_city = easyFind(R.id.tv_city);
+// locateRefresh = easyFind(R.id.locateRefresh);
+ }
+
+// private void setAdapter(){
+// mAddlist = new ArrayList<>();
+// adapter = new PoiAdapter(this);
+// lv_location_nearby.setAdapter(adapter);
+// }
+
+ @Override
+ public void onClick(View view) {
+ switch(view.getId()){
+ case R.id.img_leftBtn:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 初始化定位工具,并开始定位
+ * 0代表定位一次即停止
+ */
+ private void initLocation() {
+ helper = new BdLocationHelper(this,0);
+ helper.registerLocationListener();
+ helper.setListener(new BdLocationHelper.onSuccessLocate() {
+ @Override
+ public void handle(BDLocation bdLocation) {
+ latitude = bdLocation.getLatitude();
+ longitude = bdLocation.getLongitude();
+ LatLng point = new LatLng(latitude,longitude);
+ getAddressByReverseGeoCode(point);
+ }
+ });
+ helper.startLocate();
+ }
+
+ /**
+ * 反地理编码,获取地址信息
+ */
+ private void getAddressByReverseGeoCode(LatLng latLng){
+ //实例化一个地理编码查询对象
+ GeoCoder geoCoder = GeoCoder.newInstance();
+ //设置反地理编码位置坐标
+ ReverseGeoCodeOption op = new ReverseGeoCodeOption();
+ op.location(latLng);
+ geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
+
+ @Override
+ public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
+ address = result.getAddressDetail().city;
+ mlist = result.getPoiList();
+ setData2View();
+ //获取点击的坐标地址
+// address = arg0.getAddress();
+// pageNo = 0;
+// initPoiSearchAndSetListener();//
+// initPoiNearbySearchOption();
+// nearbySearch();//进来定位后默认提供几个位置list,参数keyword需要getAddressBy中的address
+ }
+
+ @Override
+ public void onGetGeoCodeResult(GeoCodeResult arg0) {
+ }
+ });
+ //发起反地理编码请求(经纬度->地址信息),4.5.2必须放在设置监听之后调用,否则上面监听不回调
+ geoCoder.reverseGeoCode(op);
+ }
+
+ private void setData2View() {
+ tv_city.setText(address);
+ adapter = new PoiAdapter(this,mlist);
+ lv_location_nearby.setAdapter(adapter);
+ }
+
+// /**
+// * 初始化PoiNearbySearchOption,后面会单独更新pageNo
+// */
+// private void initPoiNearbySearchOption(){
+// nearbySearchOption = new PoiNearbySearchOption();
+// nearbySearchOption.location(new LatLng(latitude, longitude));
+// nearbySearchOption.keyword(address.substring(0,address.length()-5));
+// nearbySearchOption.radius(3000);// 检索半径,单位是米
+// nearbySearchOption.pageNum(pageNo);
+// nearbySearchOption.pageCapacity(10);
+// }
+
+// /**
+// * 初始化PoiSearch并设置结果监听
+// */
+// private void initPoiSearchAndSetListener(){
+// poiSearch = PoiSearch.newInstance();
+// poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener(){
+// @Override
+// public void onGetPoiResult(PoiResult poiResult) {
+// getPoiList(poiResult);
+// }
+// @Override
+// public void onGetPoiDetailResult (PoiDetailResult arg0){
+//
+// }
+// @Override
+// public void onGetPoiIndoorResult (PoiIndoorResult poiIndoorResult){
+//
+// }
+// });
+// }
+
+// /**
+// * 附近检索
+// */
+// private void nearbySearch() {
+// poiSearch.searchNearby(nearbySearchOption);// 发起附近检索请求
+// }
+
+// private void getPoiList(PoiResult poiResult) {
+// if (poiResult != null&&poiResult.getAllPoi()!=null) {//无数据时会返回未发现结果,为null
+// mlist = poiResult.getAllPoi();
+// if (mlist.isEmpty()&&pageNo==0){
+// locateRefresh.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+// }else{
+// if(mlist.isEmpty()){
+// locateRefresh.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+// }else{
+// mAddlist.addAll(mlist);
+// adapter.updateListView(mAddlist);
+// locateRefresh.refreshFinish(PullToRefreshLayout.SUCCEED);
+// }
+// }
+// }else{
+// locateRefresh.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+// }
+// }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (helper != null) {
+ helper.stopLocate();
+ helper = null;
+ }
+ }
+
+// @Override
+// public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
+//
+// }
+//
+// @Override
+// public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
+// ++pageNo;
+// nearbySearchOption.pageNum(pageNo);
+// nearbySearch();
+// }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseProvinceActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseProvinceActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d0c3f7f7975b96010894c8778471184be47b41
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseProvinceActivity.java
@@ -0,0 +1,200 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonParser;
+import com.google.gson.reflect.TypeToken;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.CommonDataUtil;
+import com.jiuqi.elove.entity.SchoolBean;
+import com.jiuqi.elove.util.PickerViewDataUtil;
+import com.jiuqi.elove.widget.cityPicker.City;
+import com.jiuqi.elove.widget.cityPicker.CityListAdapter;
+import com.jiuqi.elove.widget.cityPicker.ResultListAdapter;
+import com.jiuqi.elove.widget.cityPicker.SideLetterBar;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class ChooseProvinceActivity extends ABaseActivity {
+
+ @BindView(R.id.listview_all_city)
+ ListView mListView;
+ @BindView(R.id.listview_search_result)
+ ListView mResultListView;
+ @BindView(R.id.side_letter_bar)
+ SideLetterBar mLetterBar;
+ @BindView(R.id.et_search)
+ EditText searchBox;
+ @BindView(R.id.iv_search_clear)
+ ImageView clearBtn;
+ @BindView(R.id.empty_view)
+ ViewGroup emptyView;
+ @BindView(R.id.tv_letter_overlay)
+ TextView overlay;
+ @BindView(R.id.tv_right)
+ TextView tv_right;
+ @BindView(R.id.rl_right_tv)
+ RelativeLayout rl_right_tv;
+
+ private CityListAdapter mCityAdapter;
+ private ResultListAdapter mResultAdapter;
+ private List mAllCities;
+ private List mSchoolList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_choose_province,"选择省份",-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ setRightClick();
+ initSchoolData();
+ initData();
+ setUpView();
+ }
+
+ private void setRightClick() {
+ rl_right_tv.setVisibility(View.VISIBLE);
+ tv_right.setText("其他学校");
+ }
+
+ private void initSchoolData() {
+ mSchoolList = PickerViewDataUtil.getSchoolList();
+ }
+
+ private void setUpView() {
+ mLetterBar.setOverlay(overlay);
+ mLetterBar.setOnLetterChangedListener(new SideLetterBar.OnLetterChangedListener() {
+ @Override
+ public void onLetterChanged(String letter) {
+ int position = mCityAdapter.getLetterPosition(letter);
+ mListView.setSelection(position);
+ }
+ });
+ searchBox.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ String keyword = s.toString();
+ if (TextUtils.isEmpty(keyword)) {
+ clearBtn.setVisibility(View.GONE);
+ emptyView.setVisibility(View.GONE);
+ mResultListView.setVisibility(View.GONE);
+ } else {
+ clearBtn.setVisibility(View.VISIBLE);
+ mResultListView.setVisibility(View.VISIBLE);
+ List result = queryCity(keyword);
+ if (result == null || result.size() == 0) {
+ emptyView.setVisibility(View.VISIBLE);
+ } else {
+ emptyView.setVisibility(View.GONE);
+ mResultAdapter.changeData(result);
+ }
+ }
+ }
+ });
+ mResultListView = (ListView) findViewById(R.id.listview_search_result);
+ mResultListView.setAdapter(mResultAdapter);
+ mResultListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ setResult2NextPage(mResultAdapter.getItem(position).getId());
+ }
+ });
+ }
+
+ @OnClick({R.id.iv_search_clear, R.id.rl_right_tv})
+ public void onClick(View view){
+ switch (view.getId()){
+ case R.id.iv_search_clear:
+ searchBox.setText("");
+ clearBtn.setVisibility(View.GONE);
+ emptyView.setVisibility(View.GONE);
+ mResultListView.setVisibility(View.GONE);
+ break;
+ case R.id.rl_right_tv:
+ startInputSchool();
+ break;
+ }
+ }
+
+ private void startInputSchool() {
+ Intent intent = new Intent(this,InputSchoolActivity.class);
+ startActivity(intent);
+ }
+
+ /**
+ * 点击进入下一页选择该省份下的学校
+ * @param id 省份的id
+ */
+ private void setResult2NextPage(String id) {
+ Intent intent = new Intent(this,ChooseSchoolActivity.class);
+ if(mSchoolList==null){
+ return;
+ }
+ ArrayList mList = new ArrayList<>();
+ for (SchoolBean bean : mSchoolList){
+ if(bean.getId().equals(id)){
+ mList.addAll(bean.getData());
+ break;
+ }
+ }
+ intent.putExtra("title","选择学校");
+ intent.putCharSequenceArrayListExtra("school",mList);
+ startActivity(intent);
+ }
+
+ private List queryCity(String keyword) {
+ List mList = new ArrayList<>();
+ for(City city :mAllCities){
+ if(city.getName().contains(keyword)){
+ mList.add(city);
+ }
+ }
+ return mList;
+ }
+
+ private void initData() {
+ mAllCities = getProvinceByJson();
+ mCityAdapter = new CityListAdapter(this, mAllCities);
+ mListView.setAdapter(mCityAdapter);
+ mCityAdapter.setOnCityClickListener(new CityListAdapter.OnCityClickListener() {
+ @Override
+ public void onCityClick(String id) {
+ setResult2NextPage(id);
+ }
+ });
+
+ mResultAdapter = new ResultListAdapter(this, null);
+ }
+
+ private List getProvinceByJson(){
+ JsonArray provinceArray = new JsonParser().parse(CommonDataUtil.schoolArea).getAsJsonArray();
+ Gson gson = new Gson();
+ Type type = new TypeToken>() {}.getType();
+ return gson.fromJson(provinceArray,type);
+ }
+
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseSchoolActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseSchoolActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..cdc2b508fef6bd3b1805661fb61c33dbcc0a2f66
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ChooseSchoolActivity.java
@@ -0,0 +1,64 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.SchoolAdapter;
+import com.jiuqi.elove.widget.rvhelper.adapter.MultiItemTypeAdapter;
+
+import java.util.List;
+
+import butterknife.BindView;
+
+public class ChooseSchoolActivity extends ABaseActivity {
+
+ @BindView(R.id.rv_school)
+ RecyclerView rv_school;
+
+ private List mSchoolList;
+ private String title;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getDataFromPre();
+ setContentView(R.layout.activity_choose_school,title,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ setData2View();
+ }
+
+ private void getDataFromPre() {
+ Intent intent = getIntent();
+ title = intent.getStringExtra("title");
+ mSchoolList = intent.getStringArrayListExtra("school");
+ }
+
+ private void setData2View() {
+ SchoolAdapter adapter = new SchoolAdapter(this, R.layout.item_school_layout,mSchoolList);
+ rv_school.setLayoutManager(new LinearLayoutManager(this));
+ rv_school.setItemAnimator(new DefaultItemAnimator());
+ rv_school.setAdapter(adapter);
+ adapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() {
+ @Override
+ public void onItemClick(View view, RecyclerView.ViewHolder holder, Object o, int position) {
+ startNewIntent((String)o);
+ }
+
+ @Override
+ public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, Object o, int position) {
+ return false;
+ }
+ });
+ }
+
+ private void startNewIntent(String school) {
+ Intent intent = new Intent(this,EditMyInfoActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ intent.putExtra("school",school);
+ startActivity(intent);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleCommentDetailActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleCommentDetailActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a9004ec27cbdc7b4d95c86943d5a95e844c4719
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleCommentDetailActivity.java
@@ -0,0 +1,376 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.CommentAdapter;
+import com.jiuqi.elove.adapter.SecondCommentAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.entity.CircleCommentModel;
+import com.jiuqi.elove.entity.CommentModel;
+import com.jiuqi.elove.util.EasyGlide;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.widget.dialog.InputDailog;
+import com.jiuqi.elove.widget.pulltorefresh.PullToRefreshLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CircleCommentDetailActivity extends ABaseActivity implements PullToRefreshLayout.OnRefreshListener{
+
+ /**
+ * 数据
+ */
+ private String recid;
+ private String circleid;
+ private String userid;
+ private int page = 1;
+ private int pagesize = 10;
+ private boolean isshow = true;
+ private String commentCount = "0";
+ private List mList;
+ private List mAddList;
+ private SecondCommentAdapter adapter;
+ private CircleCommentModel model;
+
+ /**
+ * 组件
+ */
+ @BindView(R.id.iv_avatar)
+ ImageView iv_avatar;
+ @BindView(R.id.tv_nike)
+ TextView tv_nike;
+ @BindView(R.id.tv_time)
+ TextView tv_time;
+ @BindView(R.id.tv_content)
+ TextView tv_content;
+ @BindView(R.id.tv_comment_title)
+ TextView tv_comment_title;
+ @BindView(R.id.refresh_view)
+ PullToRefreshLayout refresh_view;
+ @BindView(R.id.rv)
+ RecyclerView rv;
+ @BindView(R.id.rlay_nodata)
+ RelativeLayout rlay_nodata;
+ @BindView(R.id.tv_comment_count)
+ TextView tv_comment_count;
+ @BindView(R.id.commont_layout)
+ RelativeLayout commont_layout;
+ @BindView(R.id.iv_share)
+ ImageView iv_share;
+ @BindView(R.id.iv_favor)
+ ImageView iv_favor;
+ @BindView(R.id.tv_comment)
+ TextView tv_comment;
+ private InputDailog dialog;
+ private PopupWindow window;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_circle_comment_detail,"评论详情",-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ setView();
+ getDataFromPre();
+ initHeaderView();
+ initAdapter();
+ loadSecondComment();
+ }
+
+ private void setView() {
+ commont_layout.setVisibility(View.GONE);
+ iv_share.setVisibility(View.GONE);
+ iv_favor.setVisibility(View.GONE);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ lp.setMargins(30,0,30,0);
+ tv_comment.setLayoutParams(lp);
+ }
+
+ /**
+ * 获取数据
+ */
+ private void getDataFromPre() {
+ Intent intent = getIntent();
+ model = (CircleCommentModel) intent.getSerializableExtra("model");
+ circleid = intent.getStringExtra("circleid");//本条话题或者朋友圈id
+ recid = model.getRecid();//本条评论id
+ userid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ /**
+ * 设置本页面的主评论
+ */
+ private void initHeaderView() {
+ if(model!=null){
+ tv_nike.setText(model.getUserName());
+ tv_time.setText(model.getTime());
+ tv_content.setText(model.getComment());
+ EasyGlide.getInstance().showImage(true,model.getUserAvatar(),iv_avatar,R.drawable.img_hx_avatar);
+ }
+
+ }
+
+ /**
+ * 初始化adapter
+ */
+ private void initAdapter() {
+ mAddList = new ArrayList<>();
+ adapter = new SecondCommentAdapter(this);
+ rv.setLayoutManager(new LinearLayoutManager(this));
+ rv.setAdapter(adapter);
+ refresh_view.setOnRefreshListener(this);
+ adapter.setCommentClickListener(new SecondCommentAdapter.OnClickComment() {
+ @Override
+ public void onReplyClick(String flag, SecondCommentAdapter.CommentViewHolder holder, CommentModel model, int position) {
+
+ }
+
+ @Override
+ public void showMore(SecondCommentAdapter.CommentViewHolder holder, final CircleCommentModel model, final int position) {
+ if(window!=null){
+ window.dismiss();
+ window = null;
+ }
+
+ View view = LayoutInflater.from(CircleCommentDetailActivity.this).inflate(R.layout.popupwindow_circle,null);
+ TextView tv_handle = (TextView) view.findViewById(R.id.tv_handle);
+ //一定要销毁持有对象的view,否则改view持有的操作对象无法更新
+ if(window==null){
+ window = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ window.setBackgroundDrawable(new ColorDrawable(0x00000000));
+ window.setOutsideTouchable(true);
+ window.setFocusable(true);
+ window.setTouchable(true);
+ window.setAnimationStyle(R.style.circle_anim_style);
+ window.setContentView(view);
+ }
+ if(userid!=null&&userid.equals(model.getUserid())){//本人发的
+ if(tv_handle!=null){
+ tv_handle.setText("删除");
+ tv_handle.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ window.dismiss();
+ window = null;
+ deleteItem(model,position);
+ }
+ });
+ }
+ }else{//非本人发的
+ if(tv_handle!=null){
+ tv_handle.setText("举报");
+ tv_handle.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ window.dismiss();
+ window = null;
+ report(model,position);
+ }
+ });
+ }
+ }
+ if(window.isShowing()){
+ window.dismiss();
+ window = null;
+ }else{
+ window.showAsDropDown(holder.iv_handle,-holder.iv_handle.getWidth()/2,0);
+ }
+ }
+ });
+ }
+
+ /**
+ * 举报评论
+ * @param model
+ * @param position
+ */
+ private void report(CircleCommentModel model, int position) {
+ Intent intent = new Intent(this, ReportUserActivity.class);
+ intent.putExtra("prepage","comment");
+ intent.putExtra("myId",userid);
+ intent.putExtra("otherId",model.getRecid());
+ startActivity(intent);
+ }
+
+ /**
+ * 删除评论
+ * @param model
+ * @param position
+ */
+ private void deleteItem(final CircleCommentModel model, int position) {
+ String delCircleUrl = Constant.COMMON_URL + Interface.CIRCLE_DEL_NEW;
+ JSONObject obj = new JSONObject();
+ obj.put("version",Constant.VERSION);
+ obj.put("userid",userid);
+ obj.put("recid",model.getRecid());
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, false, delCircleUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)){
+ mAddList.remove(model);
+ adapter.updateListView(mAddList);
+ }else{
+ showToast(explanation);
+ }
+ }
+ },null);
+ }
+
+ /**
+ * 加载评论列表
+ */
+ private void loadSecondComment() {
+ String commentUrl = Constant.COMMON_URL + Interface.CIRCLE_COMMENTS;
+ JSONObject obj = new JSONObject();
+ obj.put("titleid", circleid);
+ obj.put("userid", userid);
+ obj.put("recid", recid);
+ obj.put("limit", pagesize);
+ obj.put("offset", page);
+ obj.put("version", Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, isshow, commentUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if (Constant.SUCCESS_CODE.equals(rsCode)) {
+ String temp = jsonObject.getString("message");
+ JSONObject obj = JSON.parseObject(temp);
+ commentCount = obj.getString("pageCount");//以及评论总数
+ tv_comment_count.setText(commentCount);//设置评论数到ui
+ String result = obj.getString("list");
+ mList = JSONArray.parseArray(result, CircleCommentModel.class);
+ mAddList.addAll(mList);
+ updateRecylerView();
+ } else {
+ showToast(explanation);
+ if(Constant.FAIL_CODE.equals(rsCode)){
+ finish();
+ }
+ }
+ }
+ }, null);
+
+ }
+
+ private void updateRecylerView() {
+ if(mAddList.isEmpty()){
+ rlay_nodata.setVisibility(View.VISIBLE);
+ }else{
+ rlay_nodata.setVisibility(View.GONE);
+ if(!mList.isEmpty()){
+ adapter.updateListView(mAddList);
+ refresh_view.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }else{
+ refresh_view.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+ }
+ }
+ }
+
+ @Override
+ protected void onNavigationClicked() {
+ Intent intent = new Intent();
+ intent.putExtra("size",mAddList.size());
+ setResult(RESULT_OK,intent);
+ super.onNavigationClicked();
+ }
+
+ /**
+ * 点击事件
+ */
+ @OnClick(R.id.tv_comment)
+ public void OnClick(View view){
+ switch (view.getId()){
+ case R.id.tv_comment:
+ showInputDialog();
+ break;
+ }
+ }
+
+ /**
+ * 展示评论输入框
+ */
+ private void showInputDialog() {
+ dialog = new InputDailog("我来说两句:", new InputDailog.SendBackListener() {
+ public void sendBack(final String inputText) {
+ reply(model.getUserid(),inputText,"",model.getRecid());
+ }
+ });
+ dialog.show(getSupportFragmentManager(), "dialog");
+ }
+
+ /**
+ * 评论本条朋友圈
+ * @param otherid 上一级评论的id 在这里为空上一级没有
+ * @param content
+ */
+ private void reply(final String otherid, final String content, final String othername,String firstId) {
+ String replyUrl = Constant.COMMON_URL + Interface.CIRCLE_COMMENT;
+ JSONObject obj = new JSONObject();
+ obj.put("titleid",circleid);
+ obj.put("parentid",otherid);
+ obj.put("userid",userid);
+ obj.put("content",content);
+ obj.put("firstid",firstId);//一级评论
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, true, replyUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ String result = jsonObject.getString("message");
+ CircleCommentModel cirmodel = JSON.parseObject(result,CircleCommentModel.class);
+ mAddList.add(0,cirmodel);
+ commentCount = String.valueOf(Integer.parseInt(commentCount) +1);
+ tv_comment_count.setText(commentCount);
+ rlay_nodata.setVisibility(View.GONE);
+ adapter.updateListView(mAddList);
+ dialog.dismiss();
+ }else{
+ showToast(explanation);
+ }
+ }
+ },null);
+ }
+
+ @Override
+ public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
+ mAddList.clear();
+ page = 1;
+ isshow = false;
+ loadSecondComment();
+ }
+
+ @Override
+ public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
+ page = page+1;
+ isshow = false;
+ loadSecondComment();
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleDetailActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleDetailActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..bae7b444c482f12266b27cf1d953e760b36e5b4a
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CircleDetailActivity.java
@@ -0,0 +1,936 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.animation.GlideAnimation;
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.FirstClassCommentAdapter;
+import com.jiuqi.elove.application.EloveApplication;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.entity.CircleCommentModel;
+import com.jiuqi.elove.entity.CircleNewModel;
+import com.jiuqi.elove.util.EasyGlide;
+import com.jiuqi.elove.util.GlideRoundTransform;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.util.StrUtil;
+import com.jiuqi.elove.util.SupportMultiScreenUtil;
+import com.jiuqi.elove.widget.dialog.InputDailog;
+import com.jiuqi.elove.widget.pulltorefresh.PullToRefreshLayout;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.shareboard.SnsPlatform;
+import com.umeng.socialize.utils.ShareBoardlistener;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CircleDetailActivity extends ABaseActivity implements PullToRefreshLayout.OnRefreshListener{
+
+ /**
+ * 组件
+ */
+ private InputDailog dialog;
+ @BindView(R.id.rv_comment)
+ RecyclerView rv_comment;
+ @BindView(R.id.rl_nodata)
+ RelativeLayout rl_nodata;
+ @BindView(R.id.circleRefreshView)
+ PullToRefreshLayout circleRefreshView;
+ @BindView(R.id.tv_comment_count)
+ TextView tv_comment_count;
+ @BindView(R.id.iv_favor)
+ ImageView iv_favor;
+
+ private ImageView iv_avatar;
+ private TextView tv_nike;
+ private TextView tv_time;
+ private TextView tv_content;
+ private TextView tv_like_num;
+ private TextView tv_addr;
+ private LinearLayout ll_focus;
+ private ImageView iv_focus;
+ private TextView tv_focus;
+ private TextView tv_topic;
+ private LinearLayout ll_img;
+ private RelativeLayout rl_video;
+ private ImageView iv_video;
+ private ImageView iv_like;
+ private LinearLayout ll_jubao;
+ private Bitmap imgbitmap;
+ private PopupWindow window;
+
+ /**
+ * 数据
+ */
+ private int page = 1;
+ private int pagesize = 10;
+ private boolean isshow = true;
+ private String userid;
+ private String qiyuanid;
+ private String nikename;
+ private List mList;
+ private List mAddList;
+ private FirstClassCommentAdapter adapter;
+ private String first_class_comment_count = "0";
+ private DisplayMetrics dm;
+ private CircleNewModel model;
+ public static CircleDetailActivity instance;
+ private int clickPosition;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ instance = this;
+ setContentView(R.layout.activity_circle_detail,"缘圈详情",-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT_NOINPUT);
+ dm = getResources().getDisplayMetrics();
+ getDataFromPreAndSp();
+ initAdapter();
+ }
+
+ /**
+ * 从缓存和上一页获取数据
+ */
+ private void getDataFromPreAndSp() {
+ userid = SpUtils.getString(Constant.USER_ID);
+ qiyuanid = getIntent().getStringExtra("circleid");
+ nikename = SpUtils.getString(Constant.NIKE_NAME);
+ }
+
+ /**
+ * 初始化adapter
+ */
+ private void initAdapter() {
+ RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
+ rv_comment.setLayoutManager(layoutManager);
+ adapter = new FirstClassCommentAdapter(this);
+ rv_comment.setAdapter(adapter);
+ mAddList = new ArrayList<>();
+ loadCircleDetail();
+ circleRefreshView.setOnRefreshListener(this);
+ adapter.setOnItemClickListener(new FirstClassCommentAdapter.OnItemClickListener() {
+ @Override
+ public void toCommentDetailPage(CircleCommentModel model,int position) {
+ clickPosition = position;
+ Intent intent = new Intent(CircleDetailActivity.this,CircleCommentDetailActivity.class);
+ intent.putExtra("model",model);
+ intent.putExtra("circleid",qiyuanid);
+ startActivityForResult(intent,0x01);
+ }
+
+ @Override
+ public void showMore(FirstClassCommentAdapter.CommentViewHolder holder, final CircleCommentModel model, final int position) {
+ if(window!=null){
+ window.dismiss();
+ window = null;
+ }
+ View view = LayoutInflater.from(CircleDetailActivity.this).inflate(R.layout.popupwindow_circle, null);
+ TextView tv_handle = (TextView) view.findViewById(R.id.tv_handle);
+ //一定要销毁持有对象的view,否则改view持有的操作对象无法更新
+ if (window == null) {
+ window = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ window.setOutsideTouchable(true);
+ window.setTouchable(true);
+ window.setFocusable(true);
+ window.setBackgroundDrawable(new ColorDrawable(0x00000000));
+ window.setAnimationStyle(R.style.circle_anim_style);
+ window.setContentView(view);
+ }
+ if (userid != null && userid.equals(model.getUserid())) {//本人发的
+ if (tv_handle != null) {
+ tv_handle.setText("删除");
+ tv_handle.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ window.dismiss();
+ window = null;
+ deleteItem(model, position);
+ }
+ });
+ }
+ } else {//非本人发的
+ if (tv_handle != null) {
+ tv_handle.setText("举报");
+ tv_handle.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ window.dismiss();
+ window = null;
+ report(model, position);
+ }
+ });
+ }
+ }
+ if (window.isShowing()) {
+ window.dismiss();
+ window = null;
+ } else {
+ window.showAsDropDown(holder.iv_handle, -holder.iv_handle.getWidth() / 2, 0);
+ }
+ }
+ });
+ }
+
+ /**
+ * 举报缘圈
+ */
+ private void reportCircle() {
+ Intent intent = new Intent(this, ReportUserActivity.class);
+ intent.putExtra("prepage","circle");
+ intent.putExtra("myId",userid);
+ intent.putExtra("otherId",qiyuanid);
+ startActivity(intent);
+ }
+
+ /**
+ * 举报评论
+ * @param model
+ * @param position
+ */
+ private void report(CircleCommentModel model, int position) {
+ Intent intent = new Intent(this, ReportUserActivity.class);
+ intent.putExtra("prepage","comment");
+ intent.putExtra("myId",userid);
+ intent.putExtra("otherId",model.getRecid());
+ startActivity(intent);
+ }
+
+ /**
+ * 删除评论
+ * @param cmodel
+ * @param position
+ */
+ private void deleteItem(final CircleCommentModel cmodel, int position) {
+ String delCircleUrl = Constant.COMMON_URL + Interface.CIRCLE_DEL_NEW;
+ JSONObject obj = new JSONObject();
+ obj.put("version",Constant.VERSION);
+ obj.put("userid",userid);
+ obj.put("recid",cmodel.getRecid());
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, false, delCircleUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)){
+ mAddList.remove(cmodel);
+ adapter.updateRecylerView(mAddList);
+ first_class_comment_count = String.valueOf(Integer.parseInt(first_class_comment_count)-1);
+ model.setCommentnum(first_class_comment_count);
+ tv_comment_count.setText(first_class_comment_count);
+ }else{
+ showToast(explanation);
+ }
+ }
+ },null);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if(requestCode==0x01&&resultCode==RESULT_OK){
+ int size = data.getIntExtra("size",0);
+ if(size>0){
+ mAddList.get(clickPosition).setChildCount(String.valueOf(size));
+ adapter.updateRecylerView(mAddList);
+ }
+
+ }else{
+ UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ /**
+ * 加载本条缘圈的一级评论
+ */
+ private void loadCircleFirstClassComment() {
+ String commentUrl = Constant.COMMON_URL + Interface.CIRCLE_COMMENTS;
+ JSONObject obj = new JSONObject();
+ obj.put("titleid",qiyuanid);
+ obj.put("userid",userid);
+ obj.put("recid","");
+ obj.put("limit",pagesize);
+ obj.put("offset",page);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, isshow, commentUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ String temp = jsonObject.getString("message");
+ JSONObject obj= JSON.parseObject(temp);
+ first_class_comment_count = obj.getString("pageCount");//以及评论总数
+ tv_comment_count.setText(first_class_comment_count);//设置评论数到ui
+ String result = obj.getString("list");
+ mList = JSONArray.parseArray(result,CircleCommentModel.class);
+ mAddList.addAll(mList);
+ if(mAddList.isEmpty()){
+ rl_nodata.setVisibility(View.VISIBLE);
+ if(page==1){
+ circleRefreshView.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }else{
+ circleRefreshView.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+ }
+ }else{
+ rl_nodata.setVisibility(View.GONE);
+ adapter.updateRecylerView(mAddList);
+ if(mList.isEmpty()){//第一页且有数据为刷新
+ circleRefreshView.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+ }else{//非第一页且有数据为加载,加载成功不必悬停
+ circleRefreshView.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }
+ }
+ }else{
+ showToast(explanation);
+ }
+ }
+ },null);
+ }
+
+ /**
+ * 加载本条朋友圈详情
+ */
+ private void loadCircleDetail() {
+ String detailUrl = Constant.COMMON_URL + Interface.CIRCLE_DETAIL_NEW;
+ JSONObject obj = new JSONObject();
+ obj.put("yuanquanid",qiyuanid);
+ obj.put("userid",userid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, false, detailUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ String result = jsonObject.getString("message");
+ model = JSONObject.parseObject(result,CircleNewModel.class);
+ setHeader();
+ loadCircleFirstClassComment();//请求完头部在请求下面,要不然会有滑动
+ }else{
+ showToast(explanation);
+ if(Constant.FAIL_CODE.equals(rsCode)){
+ finish();
+ }
+ }
+ }
+ },null);
+ }
+
+ public void refresh(){
+ mAddList.clear();
+ loadCircleDetail();
+ }
+
+
+ /**
+ * 生成header
+ */
+ private void setHeader() {
+ View view = LayoutInflater.from(this).inflate(R.layout.circle_detail_header,rv_comment,false);
+ SupportMultiScreenUtil.scale(view);
+ setData2ViewOrClick(view);
+ adapter.setHeaderView(view);
+ }
+
+ /**
+ * 给header设置数据,并且设置点击事件
+ * @param view
+ */
+ private void setData2ViewOrClick(View view) {
+ initView(view);
+ EasyGlide.getInstance().showImage(true,model.getAvatar(),iv_avatar,R.drawable.img_hx_avatar);
+ Glide.with(this).load(model.getAvatar()).asBitmap().transform(new GlideRoundTransform(this,8)).into(new BitmapImageViewTarget(iv_avatar){
+ @Override
+ public void onResourceReady(Bitmap resource, GlideAnimation super Bitmap> glideAnimation) {
+ imgbitmap = resource;
+ iv_avatar.setImageBitmap(imgbitmap);
+ }
+ });
+ tv_nike.setText(model.getNickname());
+ tv_time.setText(model.getTime());
+ tv_like_num.setText(model.getLikenum());
+ tv_addr.setText(model.getPosition());
+ setIfAttention(model.getUserid());//是否关注
+ setMainCircleContent(model);//关于话题、评论内容、图片或者视频
+ if(Constant.CIRCLE_LIKE == model.getIslike()){
+ iv_like.setImageResource(R.drawable.circle_like_on);
+ }else{
+ iv_like.setImageResource(R.drawable.circle_like);
+ }
+ if(Constant.CIRCLE_COLLECTION_IS.equals(model.getCollection())){
+ iv_favor.setImageResource(R.drawable.circle_shoucang_true);
+ }else{
+ iv_favor.setImageResource(R.drawable.circle_shoucang_false);
+ }
+ iv_like.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ likeOrNotThisCircle();
+ }
+ });
+ ll_jubao.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ reportCircle();
+ }
+ });
+ }
+
+
+ /**
+ * 点赞或者取消赞
+ */
+ private void likeOrNotThisCircle() {
+ String circleLikeUrl = Constant.COMMON_URL + Interface.CIRCLE_LIKE;
+ JSONObject obj = new JSONObject();
+ obj.put("version",Constant.VERSION);
+ obj.put("userid",userid);
+ obj.put("titleid",model.getYuanquanid());
+ if(Constant.CIRCLE_NOT_LIKE==model.getIslike()){//点赞
+ obj.put("action",Constant.LIKE_IS);
+ }else{
+ obj.put("action",Constant.LIKE_CANCEL);
+ }
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, true, circleLikeUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ if(Constant.CIRCLE_NOT_LIKE==model.getIslike()){//如果是为点赞的状态,则进行点赞
+ model.setIslike(Constant.CIRCLE_LIKE);
+ model.setLikenum(String.valueOf(Integer.parseInt(model.getLikenum())+1));
+ iv_like.setImageResource(R.drawable.circle_like_on);
+ }else{//取消点赞
+ model.setIslike(Constant.CIRCLE_NOT_LIKE);
+ model.setLikenum(String.valueOf(Integer.parseInt(model.getLikenum())-1));
+ iv_like.setImageResource(R.drawable.circle_like);
+ }
+ tv_like_num.setText(model.getLikenum());
+ }else{
+ showToast(explanation);
+ }
+ }
+ },null);
+ }
+
+ /**
+ * 实例化头部ui
+ */
+ private void initView(View view) {
+ iv_avatar = (ImageView) view.findViewById(R.id.iv_avatar);
+ tv_nike = (TextView) view.findViewById(R.id.tv_nike);
+ tv_time = (TextView) view.findViewById(R.id.tv_time);
+ tv_content = (TextView) view.findViewById(R.id.tv_content);
+ tv_like_num = (TextView) view.findViewById(R.id.tv_like_num);
+ tv_addr = (TextView) view.findViewById(R.id.tv_addr);
+ tv_topic = (TextView) view.findViewById(R.id.tv_topic);
+ ll_img = (LinearLayout) view.findViewById(R.id.ll_img);
+ rl_video = (RelativeLayout) view.findViewById(R.id.rl_video);
+ ll_focus = (LinearLayout) view.findViewById(R.id.ll_focus);
+ ll_jubao = (LinearLayout) view.findViewById(R.id.ll_jubao);
+ tv_focus = (TextView) view.findViewById(R.id.tv_focus);
+ iv_focus = (ImageView) view.findViewById(R.id.iv_focus);
+ iv_video = (ImageView) view.findViewById(R.id.iv_video);
+ iv_like = (ImageView) view.findViewById(R.id.iv_like);
+ }
+
+ /**
+ * 关于话题、评论内容、图片或者视频
+ * @param model
+ */
+ private void setMainCircleContent(CircleNewModel model) {
+ StrUtil.setHideText(tv_content,model.getText());
+ if(TextUtils.isEmpty(model.getTopic())){
+ tv_topic.setVisibility(View.GONE);
+ }else{
+ tv_topic.setText("#"+model.getTopic()+"#");
+ tv_topic.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startTopicDetailPage();
+ }
+ });
+ }
+ if(Constant.PUT_NO_ACTION == model.getImgstype()){//无图片和视频
+ ll_img.setVisibility(View.GONE);
+ rl_video.setVisibility(View.GONE);
+ }else if(Constant.PUT_PIC_ACTION == model.getImgstype()){//图片
+ setImage2View(model);
+ }else if(Constant.PUT_VIDEO_ACTION == model.getImgstype()){//视频
+ setVideo2View(model);
+ }
+ }
+
+ /**
+ * 进入主题页面
+ */
+ private void startTopicDetailPage() {
+ Intent intent = new Intent(this, TopicDetailActivity.class);
+ intent.putExtra("topicid",model.getTopicid());
+ startActivity(intent);
+ }
+
+ /**
+ * 内容为图片时,设置图片
+ * @param model
+ */
+ private void setImage2View(CircleNewModel model) {
+ ll_img.setVisibility(View.VISIBLE);
+ rl_video.setVisibility(View.GONE);
+ final List mList = model.getPictures();
+ for(int i=0;i() {
+ @Override
+ public void onResourceReady(Bitmap bitmap, GlideAnimation super Bitmap> glideAnimation) {
+ int width = bitmap.getWidth();
+ int height = bitmap.getHeight();
+ iv.setLayoutParams(getMyLayout((double)width/height));
+ iv.setImageBitmap(bitmap);
+ }
+ });
+// iv.setLayoutParams(getMyLayout(bean.getImgwh()));
+// EasyGlide.getInstance().showImage(false,bean.getImg(),iv,-1);
+ ll_img.addView(iv);
+ iv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startPic(mList,position);
+ }
+ });
+ }
+ }
+
+ /**
+ * 进入图片预览
+ */
+ private void startPic(List mList,int position) {
+ Intent intent;
+ if(mList.size()==1){
+ intent = new Intent(this, PreviewAvatarActivity.class);
+ intent.putExtra("imageUrl",mList.get(0).getImg());
+ }else{
+ intent = new Intent(this, PreviewImgActivity.class);
+ intent.putExtra("currentItem",String.valueOf(position));
+ Bundle bundle = new Bundle();
+ String[] imgUrls = new String[mList.size()];
+ for(int i=0;i();
+ page = 1;
+ isshow = false;
+ loadCircleFirstClassComment();
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CirclePictureEditActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CirclePictureEditActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d60ff784cabf70c83496cb99c44933d4368121d
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CirclePictureEditActivity.java
@@ -0,0 +1,258 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.baoyz.actionsheet.ActionSheet;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.util.EasyGlide;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CirclePictureEditActivity extends ABaseActivity {
+
+ /**
+ * 数据
+ */
+ private String title;
+ private int titlePos;//title显示的位置
+ private int curPos;//当前位置
+ private int total;//总的数量
+ private ArrayList imgList;//图片url的list
+ private List mViewList;//view集合
+ private ViewPagerAdapter adapter;//适配器
+ private boolean isEdit = false;//是否编辑了页面
+
+ /**
+ * 组件
+ */
+ @BindView(R.id.toolbar_title)
+ TextView toolbar_title;
+ @BindView(R.id.vp)
+ ViewPager vp;
+ @BindView(R.id.iv_right)
+ ImageView iv_right;
+ @BindView(R.id.rl_right)
+ RelativeLayout rl_right;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_circle_picture_edit,-1,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ getDataFromPre();
+ initView();
+ initDataContainer();
+ setData2View();
+ }
+
+ /**
+ * 初始化数据
+ */
+ private void initDataContainer() {
+ mViewList = new ArrayList<>();
+ adapter = new ViewPagerAdapter();
+ }
+
+ /**
+ * 初始化ui
+ */
+ private void initView() {
+ iv_right.setImageResource(R.drawable.icon_remove);
+ rl_right.setVisibility(View.VISIBLE);
+ }
+
+ /**
+ * 从上一页获取数据
+ */
+ private void getDataFromPre() {
+ Intent intent = getIntent();
+ curPos = intent.getIntExtra("position",0);
+ imgList = intent.getStringArrayListExtra("imgList");
+ titlePos = curPos + 1;
+ setTitle();
+ }
+
+ /**
+ * 更改title
+ */
+ private void setTitle() {
+ if(imgList!=null)
+ total = imgList.size();
+ else
+ total = 0;
+ title = titlePos+"/"+total;
+ toolbar_title.setText(title);
+ }
+
+ /**
+ * 将数据填充到ui
+ */
+ private void setData2View() {
+ mViewList.clear();
+ for(String url : imgList){
+ View view = LayoutInflater.from(this).inflate(R.layout.activity_avatar_preview,vp,false);
+ ImageView imageView = (ImageView) view.findViewById(R.id.large_image);
+ EasyGlide.getInstance().showImageNoCrop(false,url,imageView,R.drawable.img_hx_avatar);
+ mViewList.add(view);//将view装入数组
+ }
+ adapter.upDatalist(mViewList);
+ vp.setAdapter(adapter);
+ vp.setCurrentItem(curPos);//设置当前展示
+ vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ curPos = position;
+ titlePos = position + 1;
+ setTitle();//改变title
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+ }
+
+ @OnClick(R.id.rl_right)
+ public void onClick(){
+ createDialog();
+ }
+
+ @Override
+ protected void onNavigationClicked() {
+ if(isEdit){
+ setResultBack();
+ }
+ super.onNavigationClicked();
+ }
+
+ /**
+ * 如果删除过图片,则传递最新数据给前一页
+ */
+ private void setResultBack() {
+ Intent intent = new Intent();
+ intent.putStringArrayListExtra("imgList",imgList);
+ setResult(RESULT_OK,intent);
+ }
+
+ /**
+ * 弹出删除选择框
+ */
+ private void createDialog() {
+ setTheme(R.style.ActionSheetStyleiOS7);
+ ActionSheet.createBuilder(this, getSupportFragmentManager())
+ .setCancelButtonTitle(getString(R.string.cancel))
+ .setOtherButtonTitles(getString(R.string.delete))
+ .setCancelableOnTouchOutside(true).setListener(new ChildActionSheetListener()).show();
+ }
+
+ /**
+ * 点击弹窗回调监听
+ */
+ private class ChildActionSheetListener implements ActionSheet.ActionSheetListener{
+
+ @Override
+ public void onDismiss(ActionSheet actionSheet, boolean isCancel) {
+
+ }
+
+ @Override
+ public void onOtherButtonClick(ActionSheet actionSheet, int index) {
+ switch (index){
+ case 0:
+ deleteCurrentImg();
+ break;
+ }
+ }
+ }
+
+ /**
+ * 删除本地图片
+ */
+ private void deleteCurrentImg() {
+ isEdit = true;
+ if(imgList.isEmpty()){//无
+ curPos = -1;
+ titlePos=curPos+1;
+ showToast("当前已无图片");
+ }else{
+ imgList.remove(curPos);//删除这个位置的数据
+ mViewList.remove(curPos);
+ }
+ vp.removeAllViews();
+ adapter.notifyDataSetChanged();
+ setTitle();
+ }
+
+ /**
+ * 适配器
+ */
+ private class ViewPagerAdapter extends PagerAdapter {
+
+ private List mViewList;
+
+ private int mChildCount = 0;
+
+ @Override
+ public void notifyDataSetChanged() {
+ mChildCount = getCount();
+ super.notifyDataSetChanged();
+ }
+
+ public ViewPagerAdapter() {
+ mViewList = new ArrayList<>();
+ }
+
+ public void upDatalist(List mViewList){
+ this.mViewList.clear();
+ this.mViewList = mViewList;
+ }
+
+ @Override
+ public int getCount() {//必须实现
+ return mViewList.size();
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object object) {//必须实现
+ return view == object;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {//必须实现,实例化
+ container.addView(mViewList.get(position));
+ return mViewList.get(position);
+ }
+
+ @Override
+ public int getItemPosition(Object object) {
+// if (mChildCount > 0) {
+// mChildCount--;
+ return POSITION_NONE;
+// }
+// return super.getItemPosition(object);
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {//必须实现,销毁
+ container.removeView((View) object);
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CollectCircleActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CollectCircleActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..a846513a778e61a675fa795d463591e021eeb376
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CollectCircleActivity.java
@@ -0,0 +1,124 @@
+package com.jiuqi.elove.activity;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RadioButton;
+
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.CommonFragmentAdapter;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.fragment.CircleCollectFragment;
+import com.jiuqi.elove.fragment.CirclePublishFragment;
+
+import java.util.ArrayList;
+
+public class CollectCircleActivity extends JqBaseActivity implements View.OnClickListener{
+
+ /**
+ * 控件
+ */
+ private RadioButton tv_publish;
+ private RadioButton tv_collect;
+ private ImageView img_leftBtn;
+ private ViewPager vp;
+ private ArrayList fragmentlist;
+ private CircleCollectFragment collectFragment;
+ private CirclePublishFragment publishFragment;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_collect_circle);
+ initView();
+ addFragment();
+ setEvents();
+ }
+
+ private void initView() {
+ tv_publish = easyFind(R.id.tv_publish);
+ tv_collect = easyFind(R.id.tv_collect);
+ img_leftBtn = easyFind(R.id.img_leftBtn);
+ vp = easyFind(R.id.vp);
+ }
+
+ private void addFragment() {
+ fragmentlist = new ArrayList<>();
+ publishFragment = new CirclePublishFragment();
+ collectFragment = new CircleCollectFragment();
+ fragmentlist.add(publishFragment);
+ fragmentlist.add(collectFragment);
+ vp.setAdapter(new CommonFragmentAdapter(getSupportFragmentManager(),fragmentlist));
+ receiveChecked();//默认设置收到的礼物被选中
+ }
+
+ private void setEvents() {
+ tv_publish.setOnClickListener(this);
+ tv_collect.setOnClickListener(this);
+ img_leftBtn.setOnClickListener(this);
+ vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int i, float v, int i1) {
+
+ }
+
+ @Override
+ public void onPageSelected(int i) {
+ switch (i){
+ case 0:
+ receiveChecked();
+ break;
+ case 1:
+ sendChecked();
+ break;
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int i) {
+
+ }
+ });
+ }
+
+ /**
+ * 设置收到礼物的title被选中
+ */
+ private void receiveChecked(){
+ tv_publish.setTextColor(getResources().getColor(R.color.topbarBackground));
+ tv_collect.setTextColor(getResources().getColor(R.color.white));
+ tv_publish.setChecked(true);
+ tv_collect.setChecked(false);
+ vp.setCurrentItem(0);
+ }
+
+ /**
+ * 设置送出的礼物title被选中
+ */
+ private void sendChecked(){
+ tv_collect.setTextColor(getResources().getColor(R.color.topbarBackground));
+ tv_publish.setTextColor(getResources().getColor(R.color.white));
+ tv_collect.setChecked(true);
+ tv_publish.setChecked(false);
+ vp.setCurrentItem(1);
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()){
+ case R.id.tv_publish:
+ receiveChecked();
+ break;
+ case R.id.tv_collect:
+ sendChecked();
+ break;
+ case R.id.img_leftBtn:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommentReplyActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommentReplyActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..60f09d1ab1425e430a6817de1275aad318318755
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommentReplyActivity.java
@@ -0,0 +1,314 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v7.widget.LinearLayoutManager;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.CommentAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.entity.CommentModel;
+import com.jiuqi.elove.entity.CommentWrapModel;
+import com.jiuqi.elove.util.EasyGlide;
+import com.jiuqi.elove.util.MyLayoutManager;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.util.SupportMultiScreenUtil;
+import com.jiuqi.elove.widget.pulltorefresh.PullToRefreshLayout;
+import com.jiuqi.elove.widget.pulltorefresh.PullableRecylerView;
+import com.stonesun.newssdk.activity.SlideActivity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import butterknife.Unbinder;
+
+public class CommentReplyActivity extends SlideActivity implements PullToRefreshLayout.OnRefreshListener {
+
+ protected View rootView;
+ @BindView(R.id.iv_avatar)
+ ImageView iv_avatar;
+ @BindView(R.id.tv_nike)
+ TextView tv_nike;
+ @BindView(R.id.tv_time)
+ TextView tv_time;
+ @BindView(R.id.tv_comment)
+ TextView tv_comment;
+ @BindView(R.id.rv)
+
+ PullableRecylerView rv;
+ @BindView(R.id.refresh_view)
+ PullToRefreshLayout refresh_view;
+ @BindView(R.id.rlay_nodata)
+ RelativeLayout rlay_nodata;
+ @BindView(R.id.et_comment)
+ EditText et_comment;
+ @BindView(R.id.ll_input)
+ LinearLayout ll_input;
+ @BindView(R.id.img_nodata)
+ ImageView img_nodata;
+ @BindView(R.id.tv_content_title)
+ TextView tv_content_title;
+ private List mList;
+ private List mAddList;
+ private CommentAdapter adapter;
+ private CommentModel bean;
+ private String flag;
+ private String articleId;
+ private String limit = "10";
+ private String offset = "1";
+ private String userid;
+ private Unbinder unbinder;
+ private boolean isshow;
+
+ /**
+ * 工具
+ */
+ private final OkHttpUtil okHttpUtil = OkHttpUtil.getInstance();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_comment_reply);
+ supportMultiScreen();
+ unbinder = ButterKnife.bind(this);
+ getDataFromPre();
+ initView();
+ initAdapter();
+ initPresenter();
+ }
+
+ /**
+ * 多屏幕适配
+ */
+ private void supportMultiScreen() {
+ rootView = findViewById(android.R.id.content);
+ SupportMultiScreenUtil.scale(rootView);
+ }
+
+ private void initAdapter() {
+ rv.setLayoutManager(new LinearLayoutManager(this));
+ adapter = new CommentAdapter(this, "reply");
+ rv.setAdapter(adapter);
+ refresh_view.setOnRefreshListener(this);
+ }
+
+ private void initView() {
+ tv_content_title.setText("评论详情");
+ EasyGlide.getInstance().showImageCircle(bean.getUserAvatar(),iv_avatar);
+ MyLayoutManager.setImageLayout(this,img_nodata,0,2,1,3);
+ tv_nike.setText(bean.getUserName());
+ tv_time.setText(bean.getTime());
+ tv_comment.setText(bean.getComment());
+ et_comment.setHint(new StringBuilder().append("回复").append(bean.getUserName()).append(":"));
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (CommentAdapter.TV_REPLY.equals(flag)) {
+ ll_input.requestFocus();
+ et_comment.requestFocus();
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ public void run() {
+ InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }, 500);
+ }
+ }
+
+ private void getDataFromPre() {
+ userid = SpUtils.getString(Constant.USER_ID);
+ Intent intent = getIntent();
+ bean = (CommentModel) intent.getSerializableExtra("bean");
+ flag = intent.getStringExtra("flag");
+ articleId = intent.getStringExtra("article");
+ }
+
+ private void initPresenter() {
+ mAddList = new ArrayList<>();
+ isshow = true;
+ loadComment();
+ }
+
+ private void loadComment() {
+ String detailInfoUrl = Constant.COMMON_URL + Interface.ARTICLE_COMMENT_LIST;
+ com.alibaba.fastjson.JSONObject obj = new com.alibaba.fastjson.JSONObject();
+ obj.put("articleid", articleId);
+ obj.put("recid", bean.getRecid());
+ obj.put("offset", offset);
+ obj.put("limit", limit);
+ obj.put("version", Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, isshow, detailInfoUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(com.alibaba.fastjson.JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ if ("1".equals(rsCode)) {
+ String result = jsonObject.getString("data");
+ CommentWrapModel data = JSON.parseObject(result, CommentWrapModel.class);
+ mList = data.getList();
+ mAddList.addAll(mList);
+ updateRecylerView();
+ }
+ }
+ }, null);
+ }
+
+ @Override
+ public void finish() {
+ Intent intent = new Intent();
+ intent.putExtra("size",mAddList.size());
+ setResult(RESULT_OK,intent);
+ super.finish();
+ overridePendingTransition(0, R.anim.activity_close);
+ }
+
+ @OnClick({R.id.tv_send, R.id.ll_left})
+ public void onClick(View view){
+ switch (view.getId()){
+ case R.id.tv_send:
+ addComment(articleId,userid,bean.getRecid(),et_comment.getText().toString().trim());
+ break;
+ case R.id.ll_left:
+ finish();
+ break;
+ }
+ }
+
+ private void addComment(String id, String userid,String firstId, String trim) {
+ String addUrl = Constant.COMMON_URL + Interface.ARTICLE_ADD_COMMENT;
+ com.alibaba.fastjson.JSONObject obj = new com.alibaba.fastjson.JSONObject();
+ obj.put("articleid", id);
+ obj.put("userid", userid);
+ obj.put("firstid", firstId);
+ obj.put("comment", trim);
+ obj.put("version", Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, true, addUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(com.alibaba.fastjson.JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ if ("1".equals(rsCode)) {
+ String result = jsonObject.getString("data");
+ CommentModel data = JSON.parseObject(result, CommentModel.class);
+ mAddList.add(0, data);
+ adapter.updateListView(mAddList);
+ udpateDetailUi();
+ updateRecylerView();
+ }
+ }
+ }, null);
+ }
+
+ /**
+ * 提交信息之后清空输入内容和状态
+ */
+ private void udpateDetailUi() {
+ et_comment.setText("");
+ et_comment.clearFocus();
+ hideSoftInput(getCurrentFocus().getWindowToken());
+ }
+
+ private void updateRecylerView() {
+ if(mAddList.isEmpty()){
+ rlay_nodata.setVisibility(View.VISIBLE);
+ }else{
+ rlay_nodata.setVisibility(View.GONE);
+ if(!mList.isEmpty()){
+ adapter.updateListView(mAddList);
+ refresh_view.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }else{
+ refresh_view.loadmoreFinish(PullToRefreshLayout.SUC_NODATA);
+ }
+ }
+ }
+
+ @Override
+ public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
+ mAddList.clear();
+ offset = "1";
+ isshow = false;
+ loadComment();
+ }
+
+ @Override
+ public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
+ offset = String.valueOf(Integer.parseInt(offset)+1);
+ isshow = false;
+ loadComment();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unbinder.unbind();
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
+ View v = getCurrentFocus();
+ if (isShouldHideInput(v, ev)) {
+ hideSoftInput(v.getWindowToken());
+ }
+ }
+ return super.dispatchTouchEvent(ev);
+ }
+
+ /**
+ * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
+ *
+ * @param v
+ * @param event
+ * @return
+ */
+ private boolean isShouldHideInput(View v, MotionEvent event) {
+ if (v != null && (v instanceof EditText)) {
+ int[] l = {0, 0};
+ v.getLocationInWindow(l);
+ int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
+ + v.getWidth();
+ if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) {
+ // 点击EditText的事件,忽略它。
+ return false;
+ } else {
+ return true;
+ }
+ }
+ // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
+ return false;
+ }
+
+ /**
+ * 多种隐藏软件盘方法的其中一种
+ *
+ * @param token
+ */
+ public void hideSoftInput(IBinder token) {
+ if (token != null) {
+ InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommonH5Activity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommonH5Activity.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6fc43d1c8a81e1212c9867ecbe0c6634d49b6cc
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CommonH5Activity.java
@@ -0,0 +1,283 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.updateapk.CheckApkUpdate;
+import com.jiuqi.elove.util.AppPhoneUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.shareboard.SnsPlatform;
+import com.umeng.socialize.utils.ShareBoardlistener;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+import static android.webkit.WebSettings.LOAD_NO_CACHE;
+
+public class CommonH5Activity extends ABaseActivity {
+
+ /**
+ * 组件
+ */
+ @BindView(R.id.webView)
+ WebView webView;
+ @BindView(R.id.iv_right)
+ ImageView iv_right;
+ @BindView(R.id.rl_right)
+ RelativeLayout rl_right;
+ @BindView(R.id.tv_right)
+ TextView tv_right;
+ @BindView(R.id.rl_right_tv)
+ RelativeLayout rl_right_tv;
+ /**
+ * 数据
+ */
+ private String title;
+ private String userid;
+ private String url;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ getDataFromPre();
+ setContentView(R.layout.activity_common_h5,title,-1,MODE_BACK,HEIGHT_REDBG_WHITEFONT);
+ initView();
+ loadWebView();
+ }
+
+ /**
+ * 根据不同的title来初始化不同的view
+ */
+ private void initView() {
+ if("关于我们".equals(title)){
+ tv_right.setText("检查更新");
+ rl_right_tv.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @OnClick({R.id.rl_right,R.id.rl_right_tv})
+ public void OnClick(View view){
+ switch (view.getId()){
+ case R.id.rl_right:
+ rightIvClick();
+ break;
+ case R.id.rl_right_tv:
+ rightTvClick();
+ break;
+ }
+ }
+
+ /**
+ * 右侧文字点击
+ */
+ private void rightTvClick() {
+ if("关于我们".equals(title)){
+ checkUpdate();
+ }
+ }
+
+ /**
+ * 右侧图标点击
+ */
+ private void rightIvClick() {
+ if("缘分测试".equals(title)){
+ initUmengShare();
+ }
+ }
+
+ private void checkUpdate() {
+ String isPost = "AboutUsActivity";
+ new CheckApkUpdate(this,isPost).updateApk();
+ }
+
+ /**
+ * 从上个页面获取数据
+ */
+ private void getDataFromPre() {
+ Intent intent = getIntent();
+ title = intent.getStringExtra("title");
+ userid = SpUtils.getString(Constant.USER_ID);
+ if("名片介绍".equals(title)){
+ url = Constant.CARD_EXPLANATION;
+ }else if("缘分测试".equals(title)){
+ url = Constant.EMOTION_TEST+userid;
+ }else if("广告".equals(title)){
+ url = intent.getStringExtra("url");
+ }else if("报名活动".equals(title)){
+ url = intent.getStringExtra("url");
+ }else if("通知".equals(title)){
+ url = intent.getStringExtra("url");
+ }else if("认证说明".equals(title)){
+ url = Constant.AUTH_EXPLANATION;
+ }else if("关于我们".equals(title)){
+ url = Constant.ABOUT_US+ AppPhoneUtil.getVersion(this);
+ }else if("奖励规则".equals(title)){
+ url = Constant.REWARD_RULE;
+ }else if("启缘支付协议".equals(title)){
+ url = Constant.PAY_PROTOCOL;
+ }else if("用户协议".equals(title)){
+ url = Constant.REGISTER_PROVISIONS;
+ }
+ }
+
+ private void loadWebView() {
+ WebSettings setting = webView.getSettings();
+ setting.setJavaScriptEnabled(true);
+ setting.setUseWideViewPort(true);//将内容调整到适合webview的大小
+ setting.setLoadWithOverviewMode(true);//缩放至屏幕的大小
+ setting.setCacheMode(LOAD_NO_CACHE);
+ setting.setBuiltInZoomControls(true);//设置支持缩放
+ setting.setDisplayZoomControls(false);//设置不不出现放大缩小按钮,但是不影响对是否支持缩放功能的设置
+ setting.setAllowFileAccess(true);//设置可以访问文件
+ webView.setHorizontalScrollBarEnabled(false);
+ webView.setVerticalScrollBarEnabled(false);
+ webView.loadUrl(url);
+ webView.setWebViewClient(new MyWebClient());
+ }
+
+ private class MyWebClient extends WebViewClient{
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, String url) {
+ if(url.contains("tel")){
+ startCall(url);
+ }else if(url.contains("findLove")){
+ startSysRecommendPage();
+ }else if(url.contains("sign_up_success.html")){
+ if(EActDetailActivity2_0_3.instance!=null){
+ EActDetailActivity2_0_3.instance.refresh();
+ }
+ finish();
+ }else if(url.contains("resultpage")){
+ iv_right.setImageResource(R.drawable.icon_share);
+ rl_right.setVisibility(View.VISIBLE);
+ view.loadUrl(url);
+ }else{
+ view.loadUrl(url);
+ }
+ return true;
+ }
+ }
+
+ private void startCall(String url) {
+ Uri uri = Uri.parse(url);
+ Intent intent = new Intent(Intent.ACTION_DIAL, uri);
+ startActivity(intent);
+ }
+
+ private void startSysRecommendPage() {
+ Intent intent = new Intent(this,SysRecommendActivity.class);
+ intent.putExtra("title","有缘人");
+ startActivity(intent);
+ }
+
+ @Override
+ protected void onNavigationClicked() {
+ handleWebViewGoBack();
+ }
+
+
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ handleWebViewGoBack();
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ private void handleWebViewGoBack() {
+ if (webView.canGoBack()) {
+ if(rl_right.getVisibility()==View.VISIBLE){
+ if("缘分测试".equals(title)){
+ rl_right.setVisibility(View.GONE);
+ if(webView.canGoBackOrForward(-2)){
+ webView.goBackOrForward(-2);
+ }else{
+ webView.goBack();
+ }
+ }
+ }else{
+ webView.goBack();
+ }
+ } else {
+ finish();
+ }
+ }
+
+ private void initUmengShare() {
+ UMImage image = new UMImage(CommonH5Activity.this, BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ ShareAction action = new ShareAction(this);
+ action.setDisplayList(Constant.DISPLAY_LIST);
+ action.withTitle("我的启缘情感测评报告,快来看看吧~");
+ action.withText("来自启缘App");
+ action.withTargetUrl(Constant.SHARE_QGCS+userid);//点击分享内容打开的链接
+ action.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ action.setShareboardclickCallback(mShareBoardlistener);//设置友盟集成的分享面板的点击监听回调
+ action.open();//打开集成的分享面板
+ }
+
+ /**
+ * 友盟分享面板PopupWindow监听器
+ */
+ private ShareBoardlistener mShareBoardlistener = new ShareBoardlistener() {
+
+ @Override
+ public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
+ UMImage image = new UMImage(CommonH5Activity.this, BitmapFactory.decodeResource(getResources(), R.mipmap.app_logo));
+ ShareAction shareAction = new ShareAction(CommonH5Activity.this);
+ shareAction.setPlatform(share_media);
+ shareAction.setCallback(mUmShareListener);//设置每个平台的点击事件
+ shareAction.withTitle("我的启缘情感测评报告,快来看看吧~");
+ shareAction.withText("来自启缘App");
+ shareAction.withTargetUrl(Constant.SHARE_QGCS+userid);//点击分享内容打开的链接
+ shareAction.withMedia(image);//附带的图片,音乐,视频等多媒体对象
+ shareAction.share();//发起分享,调起微信,QQ,微博客户端进行分享。
+ }
+ };
+// title在微博中无用,text在朋友圈中无用。但是加上也不影响分享。
+
+
+ /**
+ * 友盟分享后事件监听器
+ */
+ private UMShareListener mUmShareListener = new UMShareListener() {
+
+ @Override
+ public void onResult(SHARE_MEDIA platform) {
+ Toast.makeText(CommonH5Activity.this,"分享成功",Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onError(SHARE_MEDIA platform, Throwable t) {
+ Toast.makeText(CommonH5Activity.this,"分享失败",Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onCancel(SHARE_MEDIA platform) {
+// Toast.makeText(OtherPersonCenterActivity.this,"分享取消",Toast.LENGTH_LONG).show();
+ }
+ };
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CompanyAuthActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CompanyAuthActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ab44da0e6a21436bbda273d41de9806f67868e4
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CompanyAuthActivity.java
@@ -0,0 +1,226 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.common.CommonDataUtil;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.entity.CompanyAuthModel;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CompanyAuthActivity extends ABaseActivity {
+
+ /**
+ * 组件
+ */
+ @BindView(R.id.tv_name)
+ TextView tv_name;
+ @BindView(R.id.tv_sex)
+ TextView tv_sex;
+ @BindView(R.id.et_mobile)
+ EditText et_mobile;
+ @BindView(R.id.tv_company)
+ TextView tv_company;
+ @BindView(R.id.tv_reason)
+ TextView tv_reason;
+ @BindView(R.id.tv_auth)
+ TextView tv_auth;
+ @BindView(R.id.iv_mobile_edit)
+ ImageView iv_mobile_edit;
+
+ /**
+ * 数据
+ */
+ private String userid;
+ private String name;
+ private String sex;
+ private String mobile;
+ private String company;
+ private String status;
+ private String companyId;
+ private String departmentId;
+ private String reason;
+ private CompanyAuthModel model;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_company_auth,"单位认证");
+ getDataFromSp();
+ initData2View();
+ }
+
+ /**
+ * 获取数据
+ */
+ private void getDataFromSp() {
+ userid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ /**
+ * 将数据放入ui
+ */
+ private void initData2View() {
+ String reqCompanyAuthUrl = Constant.COMMON_URL + Interface.COMPANY_AUTH_QUERY;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, true, reqCompanyAuthUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String msg = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ String result = jsonObject.getString("message");
+ model = JSONObject.parseObject(result,CompanyAuthModel.class);
+ setData2View();
+ }else{
+ showToast(msg);
+ }
+ }
+ },null);
+ }
+
+ /**
+ *
+ */
+ private void setData2View() {
+ status = model.getStatus();
+ name = model.getName();
+ sex = model.getSex();
+ mobile = model.getPhone();
+ company = model.getDepartname();
+ companyId = model.getEnterprise();
+ departmentId = model.getDepartment();
+ reason = model.getReason();
+ if(Constant.COMPANY_PASS.equals(status)){
+ et_mobile.setEnabled(false);
+ iv_mobile_edit.setVisibility(View.GONE);
+ tv_auth.setText("已通过");
+ }else if(Constant.COMPANY_WAITING.equals(status)){
+ et_mobile.setEnabled(false);
+ iv_mobile_edit.setVisibility(View.GONE);
+ tv_auth.setText("审核中");
+ }else{
+ et_mobile.setEnabled(true);
+ iv_mobile_edit.setVisibility(View.VISIBLE);
+ tv_auth.setText("提交");
+ }
+ if(Constant.COMPANY_NOTPASS.equals(status)){
+ tv_reason.setText("未通过原因:"+reason);
+ }
+ tv_name.setText(name);
+ if(!TextUtils.isEmpty(sex)){
+ tv_sex.setText(CommonDataUtil.sexMap.get(sex));
+ }
+ et_mobile.setText(mobile);
+ et_mobile.setSelection(mobile.length());
+ tv_company.setText(company);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ String companyName = intent.getStringExtra("name");
+ companyId = intent.getStringExtra("companyId");
+ departmentId = intent.getStringExtra("departmentId");
+ tv_company.setText(companyName);
+ }
+
+ @OnClick({R.id.tv_auth,R.id.rl_company,R.id.iv_mobile_edit})
+ public void OnClick(View view){
+ switch (view.getId()){
+ case R.id.tv_auth:
+ submit();
+ break;
+ case R.id.rl_company:
+ startCompany();
+ break;
+ case R.id.iv_mobile_edit:
+ enableEditMobile();
+ break;
+ }
+ }
+
+ private void enableEditMobile() {
+ et_mobile.setEnabled(true);
+ }
+
+ /**
+ * 跳转企业页面
+ */
+ private void startCompany() {
+ if(Constant.COMPANY_NOPUT.equals(status)||Constant.COMPANY_NOTPASS.equals(status)){
+ Intent intent = new Intent(this,SelectCompanyActivity.class);
+ startActivity(intent);
+ }
+ }
+
+ /**
+ * 提交单位认证
+ */
+ private void submit() {
+ if(Constant.COMPANY_NOPUT.equals(status)||Constant.COMPANY_NOTPASS.equals(status)){//只有这样才可以提交,防止由于网络请求未返回
+ if(TextUtils.isEmpty(name)){
+ showToast("请先去进行实名认证哦~");
+ return;
+ }
+ if(TextUtils.isEmpty(sex)){
+ showToast("性别丢失了哦~");
+ return;
+ }
+ if(TextUtils.isEmpty(mobile)){
+ showToast("请输入手机号");
+ return;
+ }
+ if(!JqStrUtil.isMobileNo(mobile)){
+ showToast("请输入合法的手机号");
+ return;
+ }
+ if(TextUtils.isEmpty(companyId)){
+ showToast("请选择单位");
+ return;
+ }
+ String subCompanyAuthUrl = Constant.COMMON_URL + Interface.COMPANY_AUTH_SUBMIT;
+ JSONObject obj = new JSONObject();
+ obj.put("userid",userid);
+ obj.put("phone",mobile);
+ obj.put("enterprise",companyId);
+ obj.put("department",departmentId);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, true, subCompanyAuthUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String msg = jsonObject.getString("explanation");
+ if(Constant.SUCCESS_CODE.equals(rsCode)){
+ SpUtils.setString(Constant.E_KIND,Constant.COMPANY_WAITING);
+ finish();
+ }
+ showToast(msg);
+ }
+ },null);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ okHttpUtil.cancelTag(this);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ContactListActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ContactListActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1bba169151a49675cd6bb48ff225d3511ee6790
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/ContactListActivity.java
@@ -0,0 +1,262 @@
+package com.jiuqi.elove.activity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.hyphenate.chat.EMClient;
+import com.hyphenate.easeui.EaseConstant;
+import com.hyphenate.exceptions.HyphenateException;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.ContactAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.ContactPersonModel;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.widget.dialog.CustomDialog;
+import com.jiuqi.elove.widget.pulltorefresh.PullToRefreshLayout;
+
+import java.util.List;
+
+public class ContactListActivity extends JqBaseActivity implements View.OnClickListener,PullToRefreshLayout.OnRefreshListener{
+
+ /**
+ * 组件
+ */
+ private TextView tvTitle;
+ private ImageView imgBack;
+ private PullToRefreshLayout contactRefreshView;
+ private boolean isshow = true;
+ private ListView lv_contact;
+ private RelativeLayout rlay_nodata;
+
+ /**
+ * 数据
+ */
+ private List contactList;
+ private String contact_type;
+ private String userId;
+
+ /**
+ * 联系人适配器
+ */
+ private ContactAdapter adapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_contact_list);
+ getDataFromPrePage();//从上一个页面获取数据
+ initView();//初始化组件
+ getContactList();
+ setEvents();//注册事件
+ }
+
+ private void getDataFromPrePage() {
+ contact_type = getIntent().getStringExtra("type");
+ userId = SpUtils.getString(Constant.USER_ID);
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ imgBack = easyFind(R.id.img_leftBtn);
+ imgBack.setVisibility(View.VISIBLE);
+ contactRefreshView = easyFind(R.id.contactRefreshView);
+ lv_contact = easyFind(R.id.lv_contact);
+ rlay_nodata = easyFind(R.id.rlay_nodata);
+ }
+
+ private void getContactList() {
+ String contactUrl = Constant.COMMON_URL + Interface.GET_CONTACT_PERSON;
+ JSONObject obj = new JSONObject();
+ obj.put("userID",userId);
+ obj.put("version",Constant.VERSION);
+ obj.put("type",contact_type);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this,isshow,contactUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ if("1".equals(rsCode)){
+ rlay_nodata.setVisibility(View.GONE);
+ contactRefreshView.setVisibility(View.VISIBLE);
+ /**
+ *获取三个列表人的数据结合并转换为JSONObject格式
+ */
+ String contactString = jsonObject.getString("message");
+ contactList = JSON.parseArray(contactString,ContactPersonModel.class);
+ if(contactList!=null&&!contactList.isEmpty()){
+ adapter = new ContactAdapter(ContactListActivity.this,contactList);
+ lv_contact.setAdapter(adapter);
+ setTitle(true);
+ }else{
+ rlay_nodata.setVisibility(View.VISIBLE);
+ contactRefreshView.setVisibility(View.GONE);
+ setTitle(false);
+ }
+ contactRefreshView.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }else if("122".equals(rsCode)){
+ rlay_nodata.setVisibility(View.VISIBLE);
+ contactRefreshView.setVisibility(View.GONE);
+ setTitle(false);
+ contactRefreshView.refreshFinish(PullToRefreshLayout.SUCCEED);
+ }
+ }
+ },null);
+ }
+
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()){
+ case R.id.img_leftBtn:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * 根据返回列表设置title
+ * @param flag
+ */
+ private void setTitle(boolean flag){
+ if(flag){
+ if("1".equals(contact_type)){
+ tvTitle.setText("我的好友("+contactList.size()+")");
+ }else if("2".equals(contact_type)){
+ tvTitle.setText("我的粉丝("+contactList.size()+")");
+ } else if("3".equals(contact_type)){
+ tvTitle.setText("我的关注("+contactList.size()+")");
+ }else if("4".equals(contact_type)){
+ tvTitle.setText("我的黑名单("+contactList.size()+")");
+ }
+ }else{
+ if("1".equals(contact_type)){
+ tvTitle.setText("我的好友(0)");
+ }else if("2".equals(contact_type)){
+ tvTitle.setText("我的粉丝(0)");
+ } else if("3".equals(contact_type)){
+ tvTitle.setText("我的关注(0)");
+ }else if("4".equals(contact_type)){
+ tvTitle.setText("我的黑名单(0)");
+ }
+ }
+ }
+
+ private void setEvents() {
+ imgBack.setOnClickListener(this);
+ contactRefreshView.setOnRefreshListener(this);
+ lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
+ ContactPersonModel model = contactList.get(position);
+ String userid = model.getUserID().toLowerCase();
+ String nikeName = model.getNickname();
+ String avatar = model.getAvatar();
+ if("4".equals(contact_type)){
+ showUnShieldingDialog(userid,model);
+ }else{
+ Intent intent = new Intent(ContactListActivity.this, ChatActivity.class);
+ intent.putExtra("chatType", EaseConstant.CHATTYPE_SINGLE);//2.0.2版本加群聊之后做区分
+ intent.putExtra("userId",userid);
+ intent.putExtra("nikeName",nikeName);
+ intent.putExtra("avatar",avatar);
+ startActivity(intent);
+ }
+ }
+ });
+ }
+
+ /**
+ * 选择是否取消屏蔽他人
+ */
+ private void showUnShieldingDialog(final String userid,final ContactPersonModel model) {
+ //对话框
+ CustomDialog.Builder builder = new CustomDialog.Builder(this);
+ builder.setTitle("取消屏蔽用户");
+ builder.setMessage("确定要取消屏蔽此用户吗?");
+ builder.setPositiveButton(R.string.confirm,new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ unShieldingMethod(userid,model);
+ }
+ });
+ builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
+ builder.create().show();
+ }
+
+ /**
+ * 取消屏蔽他人
+ */
+ private void unShieldingMethod(final String userid,final ContactPersonModel model) {
+ String focusUrl = Constant.COMMON_URL + Interface.ADD_FOCUS;
+ JSONObject obj = new JSONObject();
+ obj.put("otherID",userid);
+ obj.put("userID",userId);
+ obj.put("action",Constant.ACTION_UNSHIELD);//4 此时操作则为取消屏蔽他人
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ Log.d("ok", "add: param"+param);
+ okHttpUtil.sendJsonStrByPostAsync(this,true,focusUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ String explanation = jsonObject.getString("explanation");
+ if("1".equals(rsCode)) {
+ try {
+ EMClient.getInstance().contactManager().removeUserFromBlackList(userid.toLowerCase());
+ contactList.remove(model);
+ adapter.notifyDataSetChanged();
+ } catch (HyphenateException e) {
+ e.printStackTrace();
+ }
+ }else{
+ JqStrUtil.showToast(ContactListActivity.this, explanation);
+ }
+ }
+ },null);
+ }
+
+ @Override
+ public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
+ // 下拉刷新操作
+ isshow = false;
+ getContactList();
+ }
+
+ @Override
+ public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ okHttpUtil.cancelTag(this);
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CouponListActivity.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CouponListActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d1b9f683987756a60703b98a0cf2b56150abecd
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CouponListActivity.java
@@ -0,0 +1,127 @@
+package com.jiuqi.elove.activity;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.ExchangeCardAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.ExchangeCardModel;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+
+import java.util.List;
+
+public class CouponListActivity extends JqBaseActivity implements View.OnClickListener{
+
+ /**
+ * 控件
+ */
+ private TextView tvTitle;
+ private ImageView imgBack;
+ private ListView lv_card;
+ private RelativeLayout rlay_nodata;
+
+ /**
+ * 数据
+ */
+ private String actid;
+ private String userid;
+ private List mCardList;
+ /**
+ * 工具
+ */
+ private boolean isshow = true;
+ private ExchangeCardAdapter cardAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_coupon_list);
+ getDataFromPrePageAndSp();
+ initView();
+ getCouponList2View();
+ setEvents();
+ }
+
+ private void getDataFromPrePageAndSp() {
+ actid = getIntent().getStringExtra("actid");
+ userid = SpUtils.getString(Constant.USER_ID);
+ }
+
+ /**
+ * 获取优惠券
+ */
+ private void getCouponList2View() {
+ String couponListUrl = Constant.COMMON_URL + Interface.THIS_ACTTICKET_LIST;
+ JSONObject obj = new JSONObject();
+ obj.put("actid",actid);
+ obj.put("userid",userid);
+ obj.put("version",Constant.VERSION);
+ String param = obj.toJSONString();
+ okHttpUtil.sendJsonStrByPostAsync(this, isshow, couponListUrl, param, new OkHttpUtil.OnGetJsonObject() {
+ @Override
+ public void onResponse(JSONObject jsonObject) {
+ String rsCode = jsonObject.getString("retcode");
+ if("1".equals(rsCode)){
+ String result = jsonObject.getString("message");
+ mCardList = JSONArray.parseArray(result,ExchangeCardModel.class);
+ if(mCardList.isEmpty()){
+ rlay_nodata.setVisibility(View.VISIBLE);
+ }else{
+ cardAdapter = new ExchangeCardAdapter(CouponListActivity.this);
+ lv_card.setAdapter(cardAdapter);
+ cardAdapter.updateListView(mCardList);
+ }
+ }
+ }
+ },null);
+ }
+
+ private void initView() {
+ tvTitle = easyFind(R.id.tvTitle);
+ tvTitle.setText("优惠券");
+ imgBack = easyFind(R.id.img_leftBtn);
+ imgBack.setVisibility(View.VISIBLE);
+ lv_card = easyFind(R.id.lv_card);
+ rlay_nodata = easyFind(R.id.rlay_nodata);
+ }
+
+ private void setEvents() {
+ imgBack.setOnClickListener(this);
+ lv_card.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
+ ExchangeCardModel model = mCardList.get(position);
+ Intent intent = new Intent();
+ intent.putExtra("ticketid",model.getTicket());
+ intent.putExtra("money",model.getMoney());
+ intent.putExtra("action",model.getAction());
+ setResult(RESULT_OK,intent);
+ finish();
+ }
+ });
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()){
+ case R.id.img_leftBtn:
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CutPictureAty.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CutPictureAty.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bf7663ddb60ee78a90a5e28d53906c437405f66
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/CutPictureAty.java
@@ -0,0 +1,378 @@
+package com.jiuqi.elove.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
+import android.graphics.PointF;
+import android.media.ExifInterface;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.DisplayMetrics;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
+import android.view.ViewGroup.LayoutParams;
+import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.view.Window;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
+
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.util.StatusBarUtil;
+import com.jiuqi.elove.widget.CutView;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * 图片裁剪
+ */
+public class CutPictureAty extends ABaseActivity implements OnTouchListener,
+ OnClickListener {
+
+ /** 动作标志:无 */
+ private static final int NONE = 0;
+ /** 动作标志:拖动 */
+ private static final int DRAG = 1;
+ /** 动作标志:缩放 */
+ private static final int ZOOM = 2;
+ public int screenWidth = 0;
+ public int screenHeight = 0;
+ public String filename;
+ private ImageView img;
+ /** 保存按钮 */
+ private TextView save;
+ /** 取消 */
+ private TextView cancle;
+ private CutView clipview;
+ private Matrix matrix = new Matrix();
+ private Matrix savedMatrix = new Matrix();
+ /** 初始化动作标志 */
+ private int mode = NONE;
+ /** 记录起始坐标 */
+ private PointF start = new PointF();
+ /** 记录缩放时两指中间点坐标 */
+ private PointF mid = new PointF();
+ private float oldDist = 1f;
+ private Bitmap bitmap;
+ private String mPath;
+ private Double ratio;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.cut_image, R.string.imageresizer);
+ getWindowWH();
+ mPath = getIntent().getStringExtra("path");
+ ratio = getIntent().getDoubleExtra("ratio",1);//传递剪裁比例
+ bitmap = createBitmap(mPath, screenWidth, screenHeight);
+
+ int degreee = readBitmapDegree(mPath);
+ if (bitmap != null) {
+ if (degreee == 0) {
+ // mClipImageLayout.setImageBitmap(bitmap);
+ } else {
+ bitmap = rotateBitmap(degreee, bitmap);
+ }
+ } else {
+ finish();
+ }
+
+ img = (ImageView) this.findViewById(R.id.img);
+ img.setOnTouchListener(this);
+
+ ViewTreeObserver observer = img.getViewTreeObserver();
+ observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
+
+ @SuppressWarnings("deprecation")
+ public void onGlobalLayout() {
+ img.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+ initClipView(img.getTop(), bitmap);
+ }
+ });
+ save = (TextView) findViewById(R.id.save);
+ cancle = (TextView) findViewById(R.id.cancle);
+ cancle.setOnClickListener(this);
+ save.setOnClickListener(this);
+ }
+
+ /**
+ * 获取屏幕的高和宽
+ */
+ private void getWindowWH() {
+ DisplayMetrics dm = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(dm);
+ screenWidth = dm.widthPixels;
+ screenHeight = dm.heightPixels;
+ }
+
+ public Bitmap createBitmap(String path, int w, int h) {
+ try {
+ BitmapFactory.Options opts = new BitmapFactory.Options();
+ opts.inJustDecodeBounds = true;
+ // 这里是整个方法的关键,inJustDecodeBounds设为true时将不为图片分配内存。
+ BitmapFactory.decodeFile(path, opts);
+ int srcWidth = opts.outWidth;// 获取图片的原始宽度
+ int srcHeight = opts.outHeight;// 获取图片原始高度
+ int destWidth = 0;
+ int destHeight = 0;
+ // 缩放的比例
+ double ratio = 0.0;
+ if (srcWidth < w || srcHeight < h) {
+ ratio = 0.0;
+ destWidth = srcWidth;
+ destHeight = srcHeight;
+ } else if (srcWidth > srcHeight) {// 按比例计算缩放后的图片大小,maxLength是长或宽允许的最大长度
+ ratio = (double) srcWidth / w;
+ destWidth = w;
+ destHeight = (int) (srcHeight / ratio);
+ } else {
+ ratio = (double) srcHeight / h;
+ destHeight = h;
+ destWidth = (int) (srcWidth / ratio);
+ }
+ BitmapFactory.Options newOpts = new BitmapFactory.Options();
+ // 缩放的比例,缩放是很难按准备的比例进行缩放的,目前我只发现只能通过inSampleSize来进行缩放,其值表明缩放的倍数,SDK中建议其值是2的指数值
+ newOpts.inSampleSize = (int) ratio + 1;
+ // inJustDecodeBounds设为false表示把图片读进内存中
+ newOpts.inJustDecodeBounds = false;
+ // 设置大小,这个一般是不准确的,是以inSampleSize的为准,但是如果不设置却不能缩放
+ newOpts.outHeight = destHeight;
+ newOpts.outWidth = destWidth;
+ // 获取缩放后图片
+ return BitmapFactory.decodeFile(path, newOpts);
+ } catch (Exception e) {
+ // TODO: handle exception
+ return null;
+ }
+ }
+
+ /**
+ * 初始化截图区域,并将源图按裁剪框比例缩放
+ *
+ * @param top
+ * @param bitmap
+ */
+ private void initClipView(int top, final Bitmap bitmap) {
+ clipview = new CutView(this);
+ clipview.setClipRatio(ratio);
+// int width = getClipWithHeight();
+// int height = getClipWithHeight();
+// clipview.setClipHeight(height);
+// clipview.setClipWidth(width);
+ clipview.setCustomTopBarHeight(top);
+ clipview.addOnDrawCompleteListener(new CutView.OnDrawListenerComplete() {
+
+ public void onDrawCompelete() {
+ clipview.removeOnDrawCompleteListener();
+ int clipHeight = clipview.getClipHeight();
+ int clipWidth = clipview.getClipWidth();
+ int midX = clipview.getClipLeftMargin() + (clipWidth / 2);
+ int midY = clipview.getClipTopMargin() + (clipHeight / 2);
+
+ int imageWidth = bitmap.getWidth();
+ int imageHeight = bitmap.getHeight();
+
+ // 按裁剪框求缩放比例
+ float scale = (clipWidth * 1.0f) / imageWidth;
+ if (imageWidth > imageHeight) {
+ scale = (clipHeight * 1.0f) / imageHeight;
+ }
+ // 起始中心点
+ float imageMidX = imageWidth * scale / 2;
+ float imageMidY = clipview.getCustomTopBarHeight()
+ + imageHeight * scale / 2;
+ img.setScaleType(ScaleType.MATRIX);
+
+ // 缩放
+ matrix.postScale(scale, scale);
+ // 平移
+ matrix.postTranslate(midX-imageMidX, midY - imageMidY);
+
+ img.setImageMatrix(matrix);
+ img.setImageBitmap(bitmap);
+ }
+ });
+
+ this.addContentView(clipview, new LayoutParams(
+ LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+ }
+
+ public boolean onTouch(View v, MotionEvent event) {
+ ImageView view = (ImageView) v;
+ switch (event.getAction() & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_DOWN:
+ savedMatrix.set(matrix);
+ // 设置开始点位置
+ start.set(event.getX(), event.getY());
+ mode = DRAG;
+ break;
+ case MotionEvent.ACTION_POINTER_DOWN:
+ oldDist = spacing(event);
+ if (oldDist > 10f) {
+ savedMatrix.set(matrix);
+ midPoint(mid, event);
+ mode = ZOOM;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_POINTER_UP:
+ mode = NONE;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if (mode == DRAG) {
+ matrix.set(savedMatrix);
+ matrix.postTranslate(event.getX() - start.x, event.getY()
+ - start.y);
+ } else if (mode == ZOOM) {
+ float newDist = spacing(event);
+ if (newDist > 10f) {
+ matrix.set(savedMatrix);
+ float scale = newDist / oldDist;
+ matrix.postScale(scale, scale, mid.x, mid.y);
+ }
+ }
+ break;
+ }
+ view.setImageMatrix(matrix);
+ return true;
+ }
+
+ /**
+ * 多点触控时,计算最先放下的两指距离
+ *
+ * @param event
+ * @return
+ */
+ private float spacing(MotionEvent event) {
+ float x = event.getX(0) - event.getX(1);
+ float y = event.getY(0) - event.getY(1);
+ return (float) Math.sqrt(x * x + y * y);
+ }
+
+ /**
+ * 多点触控时,计算最先放下的两指中心坐标
+ *
+ * @param point
+ * @param event
+ */
+ private void midPoint(PointF point, MotionEvent event) {
+ float x = event.getX(0) + event.getX(1);
+ float y = event.getY(0) + event.getY(1);
+ point.set(x / 2, y / 2);
+ }
+
+ public void onClick(View v) {
+
+ switch (v.getId()) {
+ case R.id.save:
+ getBitmap();
+ Intent intent = new Intent();
+ intent.putExtra("path", filename);
+ setResult(Activity.RESULT_OK, intent);
+ finish();
+ break;
+ case R.id.cancle:
+ finish();
+ break;
+ }
+
+ }
+
+ // 旋转图片
+ private Bitmap rotateBitmap(int angle, Bitmap bitmap) {
+ // 旋转图片 动作
+ Matrix matrix = new Matrix();
+ matrix.postRotate(angle);
+ // 创建新的图片
+ Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
+ bitmap.getWidth(), bitmap.getHeight(), matrix, false);
+ return resizedBitmap;
+ }
+
+ // 读取图像的旋转度
+ private int readBitmapDegree(String path) {
+ int degree = 0;
+ try {
+ ExifInterface exifInterface = new ExifInterface(path);
+ int orientation = exifInterface.getAttributeInt(
+ ExifInterface.TAG_ORIENTATION,
+ ExifInterface.ORIENTATION_NORMAL);
+ switch (orientation) {
+ case ExifInterface.ORIENTATION_ROTATE_90:
+ degree = 90;
+ break;
+ case ExifInterface.ORIENTATION_ROTATE_180:
+ degree = 180;
+ break;
+ case ExifInterface.ORIENTATION_ROTATE_270:
+ degree = 270;
+ break;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return degree;
+ }
+
+ /**
+ * 获取裁剪框内截图
+ *
+ * @return
+ */
+ private Bitmap getBitmap() {
+
+ // 获取截屏
+ View view = this.getWindow().getDecorView();
+ view.setDrawingCacheEnabled(true);
+ view.buildDrawingCache();
+
+ int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT)
+ .getTop()+ StatusBarUtil.intStatusView();
+ Bitmap finalBitmap = Bitmap.createBitmap(view.getDrawingCache(),
+ clipview.getClipLeftMargin(), clipview.getClipTopMargin()
+ + contentTop, clipview.getClipWidth(),
+ clipview.getClipHeight());
+
+ savaBitmap(finalBitmap);
+ // 释放资源
+ view.destroyDrawingCache();
+
+ return finalBitmap;
+ }
+
+ /**
+ * 保存bitmap对象到本地
+ *
+ * @param bitmap
+ */
+ public void savaBitmap(Bitmap bitmap) {
+ filename = getExternalCacheDir()+"avatar.png";
+ File f = new File(filename);
+ FileOutputStream fOut = null;
+ try {
+ f.createNewFile();
+ fOut = new FileOutputStream(f);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);// 把Bitmap对象解析成流
+ try {
+ fOut.flush();
+ fOut.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private int getClipWithHeight(){
+ DisplayMetrics dm = getResources().getDisplayMetrics();
+ return dm.widthPixels-2*160;
+ }
+}
diff --git a/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/EActDetailActivity2_0_3.java b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/EActDetailActivity2_0_3.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0dc6d9f1ae7bc81424b3676fc3c4351a3f0487c
--- /dev/null
+++ b/JQ_ELOVE/src/main/java/com/jiuqi/elove/activity/EActDetailActivity2_0_3.java
@@ -0,0 +1,1372 @@
+package com.jiuqi.elove.activity;
+
+import android.Manifest;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.location.BDLocation;
+import com.baidu.location.BDLocationListener;
+import com.baidu.location.LocationClient;
+import com.baidu.location.LocationClientOption;
+import com.baoyz.actionsheet.ActionSheet;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.jiuqi.elove.R;
+import com.jiuqi.elove.adapter.CoOrganizerAdapter;
+import com.jiuqi.elove.adapter.DiscussAdapter;
+import com.jiuqi.elove.adapter.PriceAdapter;
+import com.jiuqi.elove.common.Constant;
+import com.jiuqi.elove.common.Interface;
+import com.jiuqi.elove.common.JqBaseActivity;
+import com.jiuqi.elove.entity.DiscussEntity;
+import com.jiuqi.elove.entity.EActDetailModel2_0_3;
+import com.jiuqi.elove.entity.LikeUserEntity;
+import com.jiuqi.elove.entity.PriceInfoModel;
+import com.jiuqi.elove.util.CommonUtil;
+import com.jiuqi.elove.util.EasyGlide;
+import com.jiuqi.elove.util.JqStrUtil;
+import com.jiuqi.elove.util.OkHttpUtil;
+import com.jiuqi.elove.util.SpUtils;
+import com.jiuqi.elove.widget.dialog.CustomDialog;
+import com.jiuqi.elove.widget.ListViewForScrollView;
+import com.jiuqi.elove.widget.dialog.PopoverDialog;
+import com.umeng.socialize.ShareAction;
+import com.umeng.socialize.UMShareAPI;
+import com.umeng.socialize.UMShareListener;
+import com.umeng.socialize.bean.SHARE_MEDIA;
+import com.umeng.socialize.media.UMImage;
+import com.umeng.socialize.shareboard.SnsPlatform;
+import com.umeng.socialize.utils.ShareBoardlistener;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * Created by FanWenXia on 2016/7/19.
+ */
+public class EActDetailActivity2_0_3 extends JqBaseActivity implements View.OnClickListener, ActionSheet.ActionSheetListener {
+
+ private static final String TAG = "EActDetailActivity2_0_3";
+ /*顶部菜单栏按钮*/
+ private TextView tvTitle;
+ private ImageView tvBack;
+ private ImageView tvMore;
+ private Bitmap imgbitmap;
+ private String startTime;
+
+ private WebView wv_actdetail;
+ public static EActDetailActivity2_0_3 instance;
+ /**
+ * 活动内容部分
+ */
+ private ImageView iv_poster;
+ private String actTitle;
+ private String money;
+ private double longitude;//活动地点经度
+ private double latitude;//活动地点纬度
+ private String addressname;
+ private String signstatus;//用户报名状态 -1:未报名 1:正在审核 2:审核通过 3:审核未通过4:待付款
+ private String enterpriseName;//企业名称
+ private String holderId;
+ private String enterpriseDetail;//企业介绍
+ private String act_details;
+ private Double viprate;//折扣率
+ private String ticketId;//票id
+ private String isVipSelected = "0";//默认不勾选折扣
+
+ private TextView tv_title;
+ private TextView tv_pTimeStr;
+ private TextView tv_looknum;
+ private TextView tv_sharenum;
+ // private TextView txt_detail;
+ private TextView tv_time;
+ private RelativeLayout raly_adds;
+ private TextView tv_adds;
+ private TextView tv_signnum;
+ private TextView tv_money;
+ private RelativeLayout raly_holder;
+ private TextView tv_holder;
+ // private TextView txt_nameStr;
+// private TextView txt_phoneStr;
+ private TextView tv_signNum;
+ private TextView tv_noSign;
+ private RelativeLayout rlay_signUser;
+ private LinearLayout ll_signBtn;
+ private TextView tv_signStatus;
+ private RelativeLayout rl_money;
+ private LinearLayout ll_webview;//webview显示html页面的布局
+ private LinearLayout ll_signUser;//显示报名用户头像的布局
+ private Button btn_next;
+ private ImageView iv_vip;
+ private ImageView iv_moneyorfree;
+ private StringBuilder sb;
+ private TextView tv_contactperson;
+ private TextView tv_contactphone;
+ private LinearLayout ll_coorganizer;
+ private RecyclerView lv_coorganizer;
+
+ private List