MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2017年9月27日

System.out.println("availableLocales :"+  Locale.getAvailableLocales().length);

Locale[] arr=Locale.getAvailableLocales();
Arrays.sort(arr, new Comparator<Locale>() {
@Override
public int compare(Locale o1, Locale o2) {
return o1.getLanguage().compareTo(o2.getLanguage());
}
});

for(Locale l:arr){
System.out.println("语言:"+ l.getLanguage()+" 名称:"+l.getDisplayLanguage()
+(StringUtils.isEmpty(l.getDisplayCountry())?"":(" 国家:"+ l.getDisplayCountry())) + " "+l.toString());
}
输出如下
availableLocales :160
语言: 名称:
语言:ar 名称:阿拉伯文 国家:阿拉伯联合酋长国 ar_AE
语言:ar 名称:阿拉伯文 国家:约旦 ar_JO
语言:ar 名称:阿拉伯文 国家:叙利亚 ar_SY
语言:ar 名称:阿拉伯文 国家:巴林 ar_BH
语言:ar 名称:阿拉伯文 国家:沙特阿拉伯 ar_SA
语言:ar 名称:阿拉伯文 国家:也门 ar_YE
语言:ar 名称:阿拉伯文 国家:埃及 ar_EG
语言:ar 名称:阿拉伯文 国家:苏丹 ar_SD
语言:ar 名称:阿拉伯文 国家:突尼斯 ar_TN
语言:ar 名称:阿拉伯文 国家:伊拉克 ar_IQ
语言:ar 名称:阿拉伯文 国家:摩洛哥 ar_MA
语言:ar 名称:阿拉伯文 国家:卡塔尔 ar_QA
语言:ar 名称:阿拉伯文 国家:阿曼 ar_OM
语言:ar 名称:阿拉伯文 ar
语言:ar 名称:阿拉伯文 国家:科威特 ar_KW
语言:ar 名称:阿拉伯文 国家:利比亚 ar_LY
语言:ar 名称:阿拉伯文 国家:阿尔及利亚 ar_DZ
语言:ar 名称:阿拉伯文 国家:黎巴嫩 ar_LB
语言:be 名称:白俄罗斯文 be
语言:be 名称:白俄罗斯文 国家:白俄罗斯 be_BY
语言:bg 名称:保加利亚文 bg
语言:bg 名称:保加利亚文 国家:保加利亚 bg_BG
语言:ca 名称:加泰罗尼亚文 国家:西班牙 ca_ES
语言:ca 名称:加泰罗尼亚文 ca
语言:cs 名称:捷克文 cs
语言:cs 名称:捷克文 国家:捷克共和国 cs_CZ
语言:da 名称:丹麦文 国家:丹麦 da_DK
语言:da 名称:丹麦文 da
语言:de 名称:德文 de
语言:de 名称:德文 国家:瑞士 de_CH
语言:de 名称:德文 国家:奥地利 de_AT
语言:de 名称:德文 国家:卢森堡 de_LU
语言:de 名称:德文 国家:德国 de_DE
语言:de 名称:德文 国家:希腊 de_GR
语言:el 名称:希腊文 el
语言:el 名称:希腊文 国家:塞浦路斯 el_CY
语言:el 名称:希腊文 国家:希腊 el_GR
语言:en 名称:英文 国家:美国 en_US
语言:en 名称:英文 国家:新加坡 en_SG
语言:en 名称:英文 国家:马耳他 en_MT
语言:en 名称:英文 en
语言:en 名称:英文 国家:菲律宾 en_PH
语言:en 名称:英文 国家:新西兰 en_NZ
语言:en 名称:英文 国家:南非 en_ZA
语言:en 名称:英文 国家:澳大利亚 en_AU
语言:en 名称:英文 国家:爱尔兰 en_IE
语言:en 名称:英文 国家:加拿大 en_CA
语言:en 名称:英文 国家:印度 en_IN
语言:en 名称:英文 国家:英国 en_GB
语言:es 名称:西班牙文 国家:巴拿马 es_PA
语言:es 名称:西班牙文 国家:委内瑞拉 es_VE
语言:es 名称:西班牙文 国家:波多黎哥 es_PR
语言:es 名称:西班牙文 国家:玻利维亚 es_BO
语言:es 名称:西班牙文 国家:阿根廷 es_AR
语言:es 名称:西班牙文 国家:萨尔瓦多 es_SV
语言:es 名称:西班牙文 es
语言:es 名称:西班牙文 国家:西班牙 es_ES
语言:es 名称:西班牙文 国家:哥伦比亚 es_CO
语言:es 名称:西班牙文 国家:巴拉圭 es_PY
语言:es 名称:西班牙文 国家:厄瓜多尔 es_EC
语言:es 名称:西班牙文 国家:美国 es_US
语言:es 名称:西班牙文 国家:危地马拉 es_GT
语言:es 名称:西班牙文 国家:墨西哥 es_MX
语言:es 名称:西班牙文 国家:洪都拉斯 es_HN
语言:es 名称:西班牙文 国家:智利 es_CL
语言:es 名称:西班牙文 国家:多米尼加共和国 es_DO
语言:es 名称:西班牙文 国家:古巴 es_CU
语言:es 名称:西班牙文 国家:乌拉圭 es_UY
语言:es 名称:西班牙文 国家:哥斯达黎加 es_CR
语言:es 名称:西班牙文 国家:尼加拉瓜 es_NI
语言:es 名称:西班牙文 国家:秘鲁 es_PE
语言:et 名称:爱沙尼亚文 et
语言:et 名称:爱沙尼亚文 国家:爱沙尼亚 et_EE
语言:fi 名称:芬兰文 国家:芬兰 fi_FI
语言:fi 名称:芬兰文 fi
语言:fr 名称:法文 国家:比利时 fr_BE
语言:fr 名称:法文 国家:瑞士 fr_CH
语言:fr 名称:法文 fr
语言:fr 名称:法文 国家:卢森堡 fr_LU
语言:fr 名称:法文 国家:法国 fr_FR
语言:fr 名称:法文 国家:加拿大 fr_CA
语言:ga 名称:爱尔兰文 ga
语言:ga 名称:爱尔兰文 国家:爱尔兰 ga_IE
语言:hi 名称:印地文 国家:印度 hi_IN
语言:hi 名称:印地文 hi
语言:hr 名称:克罗地亚文 国家:克罗地亚 hr_HR
语言:hr 名称:克罗地亚文 hr
语言:hu 名称:匈牙利文 hu
语言:hu 名称:匈牙利文 国家:匈牙利 hu_HU
语言:in 名称:印度尼西亚文 in
语言:in 名称:印度尼西亚文 国家:印度尼西亚 in_ID
语言:is 名称:冰岛文 国家:冰岛 is_IS
语言:is 名称:冰岛文 is
语言:it 名称:意大利文 it
语言:it 名称:意大利文 国家:瑞士 it_CH
语言:it 名称:意大利文 国家:意大利 it_IT
语言:iw 名称:希伯来文 国家:以色列 iw_IL
语言:iw 名称:希伯来文 iw
语言:ja 名称:日文 国家:日本 ja_JP_JP_#u-ca-japanese
语言:ja 名称:日文 ja
语言:ja 名称:日文 国家:日本 ja_JP
语言:ko 名称:朝鲜文 ko
语言:ko 名称:朝鲜文 国家:韩国 ko_KR
语言:lt 名称:立陶宛文 lt
语言:lt 名称:立陶宛文 国家:立陶宛 lt_LT
语言:lv 名称:拉托维亚文(列托) lv
语言:lv 名称:拉托维亚文(列托) 国家:拉脱维亚 lv_LV
语言:mk 名称:马其顿文 mk
语言:mk 名称:马其顿文 国家:马其顿王国 mk_MK
语言:ms 名称:马来文 国家:马来西亚 ms_MY
语言:ms 名称:马来文 ms
语言:mt 名称:马耳他文 国家:马耳他 mt_MT
语言:mt 名称:马耳他文 mt
语言:nl 名称:荷兰文 nl
语言:nl 名称:荷兰文 国家:荷兰 nl_NL
语言:nl 名称:荷兰文 国家:比利时 nl_BE
语言:no 名称:挪威文 国家:挪威 no_NO_NY
语言:no 名称:挪威文 国家:挪威 no_NO
语言:no 名称:挪威文 no
语言:pl 名称:波兰文 国家:波兰 pl_PL
语言:pl 名称:波兰文 pl
语言:pt 名称:葡萄牙文 pt
语言:pt 名称:葡萄牙文 国家:巴西 pt_BR
语言:pt 名称:葡萄牙文 国家:葡萄牙 pt_PT
语言:ro 名称:罗马尼亚文 国家:罗马尼亚 ro_RO
语言:ro 名称:罗马尼亚文 ro
语言:ru 名称:俄文 国家:俄罗斯 ru_RU
语言:ru 名称:俄文 ru
语言:sk 名称:斯洛伐克文 sk
语言:sk 名称:斯洛伐克文 国家:斯洛伐克 sk_SK
语言:sl 名称:斯洛文尼亚文 sl
语言:sl 名称:斯洛文尼亚文 国家:斯洛文尼亚 sl_SI
语言:sq 名称:阿尔巴尼亚文 sq
语言:sq 名称:阿尔巴尼亚文 国家:阿尔巴尼亚 sq_AL
语言:sr 名称:塞尔维亚文 国家:黑山 sr_ME
语言:sr 名称:塞尔维亚文 国家:波斯尼亚和黑山共和国 sr_BA_#Latn
语言:sr 名称:塞尔维亚文 国家:塞尔维亚及黑山 sr_CS
语言:sr 名称:塞尔维亚文 国家:波斯尼亚和黑山共和国 sr_BA
语言:sr 名称:塞尔维亚文 国家:黑山 sr_ME_#Latn
语言:sr 名称:塞尔维亚文 sr__#Latn
语言:sr 名称:塞尔维亚文 国家:塞尔维亚 sr_RS
语言:sr 名称:塞尔维亚文 sr
语言:sr 名称:塞尔维亚文 国家:塞尔维亚 sr_RS_#Latn
语言:sv 名称:瑞典文 国家:瑞典 sv_SE
语言:sv 名称:瑞典文 sv
语言:th 名称:泰文 国家:泰国 th_TH
语言:th 名称:泰文 th
语言:th 名称:泰文 国家:泰国 th_TH_TH_#u-nu-thai
语言:tr 名称:土耳其文 tr
语言:tr 名称:土耳其文 国家:土耳其 tr_TR
语言:uk 名称:乌克兰文 uk
语言:uk 名称:乌克兰文 国家:乌克兰 uk_UA
语言:vi 名称:越南文 国家:越南 vi_VN
语言:vi 名称:越南文 vi
语言:zh 名称:中文 国家:台湾地区 zh_TW
语言:zh 名称:中文 国家:香港 zh_HK
语言:zh 名称:中文 国家:新加坡 zh_SG
语言:zh 名称:中文 国家:中国 zh_CN
语言:zh 名称:中文 zh

posted @ 2017-09-27 20:17 leekiang 阅读(40) | 评论 (0)编辑 收藏

2016年12月21日


repositories{
mavenCentral()
}
dependencies {
compile ('com.google.android.gms:play-services-maps:10.0.1')
}
按以上配置,运行clean时报错,无法加载play-services-maps 10.0.1包。
Error:(69, 14) Failed to resolve: com.google.android.gms:play-services-maps:10.0.1
<a href="install.m2.repo">Install Repository and sync project</a><br><a href="openFile:/Users/you/AndroidProjects/yourapp/app/build.gradle">Show in File</a><br><a href="open.dependency.in.project.structure">Show in Project Structure dialog</a>
点击Android Studio的提示如何修复的链接,就会自动下载Google的相关依赖包到本地。下载时弹出窗口中显示的一些信息如下。

Install Missing Componets
SDK Path:/User/you/Library/Android/sdk

To install:
- SDK Patch Applier v4 (patcher;v4)
- Google Repository (extras;google;m2repository)

Installing SDK Patch Applier v4
Downloading https://dl.google.com/android/repository/3534162-studio.sdk-patcher.zip
Installing SDK Patch Applier v4 in /Users/you/Library/Android/sdk/patcher/v4
Installation of SDK Patch Applier v4 complete.

Installing Google Repository
Downloading https://dl.google.com/android/repository/google_m2repository_gms_v8_rc42_wear_2b1_rc4.zip
Installing Google Repository in /Users/you/Library/Android/sdk/extras/google/m2repository
Installation of Google Repository complete.


http://stackoverflow.com/questions/16978190/add-google-maps-api-v2-in-a-fragment
http://www.joellipman.com/articles/google/android/application-development/android-os-add-googlemap-as-fragment.html
https://www.zhihu.com/question/20892245
http://blog.csdn.net/woshilisao/article/details/8647649 android fragment(android.support.v4.app.Fragment和android.app.Fragment区别)
http://www.tuicool.com/articles/YFBv6nJ Introduction to Google Maps API for Android

posted @ 2016-12-21 00:24 leekiang 阅读(270) | 评论 (0)编辑 收藏

2016年11月24日


https://github.com/lzyzsd/JsBridge  
注意:使用lzyzsd/JsBridge  ,覆盖WebViewClient时一定要继承BridgeWebViewClient,否则js和java互相调用不管用
webview.setWebViewClient(new BridgeWebViewClient(webview) 

另外还有一个WebViewJavascriptBridge:https://github.com/gzsll/WebViewJavascriptBridge

http://www.cnblogs.com/wingyip/p/5426477.html JsBridge实现Javascript和Java的互相调用
http://blog.csdn.net/sk719887916/article/details/47189607 
 Android 利用WebViewJavascriptBridge 实现js和java的交互
http://www.jb51.net/article/37208.htm Android在其他线程中更新UI线程的解决方法

posted @ 2016-11-24 16:19 leekiang 阅读(89) | 评论 (0)编辑 收藏

2016年10月26日

向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity.Main.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from MainActivity!");
it.putExtras(bundle);       // it.putExtra("name","abc");
startActivity(it);            // startActivityForResult(it,REQUEST_CODE);
 
对于数据的获取可以采用:
Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");

参考:
http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html
http://www.cnblogs.com/tornadomeet/archive/2012/07/28/2613617.html 从一个activity跳转到另外一个activity

posted @ 2016-10-26 00:54 leekiang 阅读(96) | 评论 (0)编辑 收藏

2016年10月25日

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
minifyEnabled改为true。
ProGuard是Android SDK附带的。如果需要顶尖的安全性,ProGuard就力不从心了,可以使用DexGuard。

参考:
读懂 Android 中的代码混淆 http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/

posted @ 2016-10-25 23:41 leekiang 阅读(119) | 评论 (0)编辑 收藏

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
增加代码requestWindowFeature(Window.FEATURE_NO_TITLE)以去掉标题栏,并且代码放在setContentView之前,但还是报异常
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
AppCompatActivity改为Activity才得以解决。不知道AppCompatActivity和Activity有何区别。

参考:http://www.cnblogs.com/and_he/archive/2011/06/01/2067106.html Android中全屏或者取消标题栏

posted @ 2016-10-25 22:38 leekiang 阅读(76) | 评论 (0)编辑 收藏

2016年10月24日

 首先在“设置”-“关于手机”里多次点击【MIUI版本】进入开发者模式,但在Android Studio里运行时找不到设备,执行adb devices也看不到设备。
在拨号界面按  *#*#717717#*#*  , 出现 Diag USB port enable。 再次执行adb devices,看到设备了,但显示为unauthorized。
最后发现,设置-其他高级设置-开发者选项,开启“开发者选项”,同时开启“USB调试”,再次执行adb devices,终于成功的显示设备了。
 

posted @ 2016-10-24 11:45 leekiang 阅读(130) | 评论 (0)编辑 收藏

2016年10月21日

1.public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url);
       return true;
  }
重写shouldOverrideUrlLoading方法,返回true表示点击链接是在当前webview里打开,而不是调用浏览器打开


WebViewClient与WebChromeClient的区别 http://blog.csdn.net/jackyhuangch/article/details/8310033
Android中WebView拦截替换网络请求数据http://droidyue.com/blog/2014/11/23/block-web-resource-in-webview/
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/1010/1569.html android WebView全面总结
自定义可下拉刷新的WebView http://www.voidcn.com/blog/Moy01/article/p-4587219.html
android webview远程调试http://www.cnblogs.com/carlos-guo/p/3920915.html
http://www.udpwork.com/item/13349.html  WebView处理网页位置请求
http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html 带进度条的webview
http://blog.csdn.net/u014400200/article/details/38511419 webview处理视频
http://blog.csdn.net/jackyhuangch/article/details/8310033 关于android WebViewClient和WebChromeClient
http://www.weblog-life.net/entry/2016/03/12/080300 webview如何使用google地图,日本人写的
http://stackoverflow.com/questions/5329662/android-webview-geolocation  
https://github.com/delight-im/Android-AdvancedWebView 这个支持地理定位

posted @ 2016-10-21 21:43 leekiang 阅读(115) | 评论 (0)编辑 收藏

2016年10月13日

1. Android Studio2.2在mac下启动报错
找不到原因,改为使用Android Studio 2.1.3
下载地址:http://tools.android.com/download/studio/builds/2-1-3

2. 编译某项目报错Could not find property 'config' on SigningConfig container
在build.grade文件的android->signingConfigs节点下增加config配置
android {
    signingConfigs {
        config {
            keyAlias '你的key别名'
            keyPassword '你的key密码'
            storeFile file('你的密钥存储路径')
            storePassword '你的存储密码'
        }
    }
...

3. 编译报错failed to find target android-22
/Users/username/Library/Android/sdk/platforms下发现有android-24目录,故将编译级别都设为24。
修改build.grade文件的相关属性:
compileSdkVersion 24
buildToolsVersion "24.0.0"
targetSdkVersion 24
compile 'com.android.support:appcompat-v7:24.0.0'

4. 编译报错Gradle sync failed: Gradle DSL method not found: 'android()'
删除项目根目录下的build.gradle文件,因为app目录下已经有build.gradle了。
备份下根目录下build.gradle文件的内容:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
android {
    compileSdkVersion 24
}
dependencies {
}

5. 编译报错Plugin with id 'com.android.application' not found
恢复项目根目录下的build.gradle文件,将内容修改为如下:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

6. 编译报错:failed to find Build Tools revision 24.0.0
/Users/username/Library/Android/sdk/build-tools下查看自己的BuildTools版本,发现是24.0.3,然后将buildToolsVersion修改为该版本:
buildToolsVersion "24.0.3"

7. Android Studio编译执行以下任务时一直等待,执行了一个小时也没动静。
Executing tasks: [:app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:prepareDebugUnitTestDependencies, :app:mockableAndroidJar]
打开Preferences->Build-Excecution-Deployment->BuildTools->Gra‌​dle,勾选Offline work
参见http://stackoverflow.com/questions/25629368/how-to-fix-android-studio-getting-stuck-executing-gradle-tasks

8. Exception in thread "png-cruncher_5" java.lang.RuntimeException: Timed out while waiting for slave aapt process
不知道原因,最终是通过修改SDK Build Tools为19.1.0、升级JDK由JDK7升至JDK8、增加环境变量SLAVE_AAPT_TIMEOUT=30等搞定的

9. 如何修改SDK和JDK的路径
在File->Project Structure里修改

10. 修改Android Studio中java代码的编译级别
打开File --> Project Structure-->app,修改Source Compatibility和Target Compatibility

11.如何在使用gradle时增加--stacktrace参数
Preferences->Build-Excecution-Deployment->Compiler
增加--info或--debug,在解决报错时能看到更多的信息

12. 报错aapt ..finished with non- zero exit value 1
找不到原因,增加编译参数--info后发现有用的信息:invalid resource directory name: ..app\build\intermediates\res\merged\debug/values-b+sr+Latn

13.invalid resource directory name: ..app\build\intermediates\res\merged\debug/values-b+sr+Latn
不知道原因,将版本升级到21解决了。

14. 编译时报找不到AppCompatActivity类的错误
改为使用:compile 'com.android.support:appcompat-v7:22.2.1'
同时将版本由21升级到22

15. 生成apk时报错:Missing Gradle Project Information. Please check if the IDE successfully synchronized its state with the Gradle Project Model
在工具栏里点击“Sync Project with Gradle Files”按钮

16.导入某项目时报错Error:Gradle version 2.14.1 is required. Current version is 2.4. If using the gradle wrapper, try editing the distributionUrl in...
打开Android Studio的File->Project Structure,点击Project,将Gradle version修改为2.14.1
在/Applications/Android Studio.app/Contents/gradle下的确只有gradle-2.14.1

25.如何修改生成的apk的名字
http://www.jianshu.com/p/93051c9e97fb
Android Studio如何发布APK:http://chenfeicqq.iteye.com/blog/1889160

26. 在gradle.properties中增加android.enableBuildCache=true,貌似能加快编译速度。

posted @ 2016-10-13 21:25 leekiang 阅读(486) | 评论 (0)编辑 收藏

2015年3月2日

参考dubbo里的NetUtils类

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.regex.Pattern;

public class GetIP {
public static void main(String[] args) {
System.out.println(GetIP.getLocalAddress0().getHostAddress());
}
public static InetAddress getLocalAddress0() {
        InetAddress localAddress = null;
        try {
            localAddress = InetAddress.getLocalHost();
            if (isValidAddress(localAddress)) {
                return localAddress;
            }
        } catch (Throwable e) {
            System.out.println("Failed to retriving ip address, " + e.getMessage());
        }
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            if (interfaces != null) {
                while (interfaces.hasMoreElements()) {
                    try {
                        NetworkInterface network = interfaces.nextElement();
                        Enumeration<InetAddress> addresses = network.getInetAddresses();
                        if (addresses != null) {
                            while (addresses.hasMoreElements()) {
                                try {
                                    InetAddress address = addresses.nextElement();
                                    if (isValidAddress(address)) {
                                        return address;
                                    }
                                } catch (Throwable e) {
                                    System.out.println("Failed to retriving ip address, " + e.getMessage());
                                }
                            }
                        }
                    } catch (Throwable e) {
                        System.out.println("Failed to retriving ip address, " + e.getMessage());
                    }
                }
            }
        } catch (Throwable e) {
            System.out.println("Failed to retriving ip address, " + e.getMessage());
        }
        System.out.println("Could not get local host ip address, will use 127.0.0.1 instead.");
        return localAddress;
    }
    private static boolean isValidAddress(InetAddress address) {
        if (address == null || address.isLoopbackAddress())
            return false;
        String name = address.getHostAddress();
        return (name != null
                && ! ANYHOST.equals(name)
                && ! LOCALHOST.equals(name)
                && IP_PATTERN.matcher(name).matches());
    }
    
    public static final String LOCALHOST = "127.0.0.1";

    public static final String ANYHOST = "0.0.0.0";
    
    private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
}

posted @ 2015-03-02 06:29 leekiang 阅读(351) | 评论 (0)编辑 收藏