<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    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 名稱:阿拉伯文 國家:阿拉伯聯(lián)合酋長國 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 名稱:西班牙文 國家:委內(nèi)瑞拉 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 名稱:中文 國家:臺灣地區(qū) zh_TW
    語言:zh 名稱:中文 國家:香港 zh_HK
    語言:zh 名稱:中文 國家:新加坡 zh_SG
    語言:zh 名稱:中文 國家:中國 zh_CN
    語言:zh 名稱:中文 zh

    posted @ 2017-09-27 20:17 leekiang 閱讀(906) | 評論 (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的提示如何修復(fù)的鏈接,就會自動下載Google的相關(guān)依賴包到本地。下載時彈出窗口中顯示的一些信息如下。

    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區(qū)別)
    http://www.tuicool.com/articles/YFBv6nJ Introduction to Google Maps API for Android

    posted @ 2016-12-21 00:24 leekiang 閱讀(1223) | 評論 (0)編輯 收藏

    2016年11月24日


    https://github.com/lzyzsd/JsBridge  
    注意:使用lzyzsd/JsBridge  ,覆蓋WebViewClient時一定要繼承BridgeWebViewClient,否則js和java互相調(diào)用不管用
    webview.setWebViewClient(new BridgeWebViewClient(webview) 

    另外還有一個WebViewJavascriptBridge:https://github.com/gzsll/WebViewJavascriptBridge

    http://www.cnblogs.com/wingyip/p/5426477.html JsBridge實現(xiàn)Javascript和Java的互相調(diào)用
    http://blog.csdn.net/sk719887916/article/details/47189607 
     Android 利用WebViewJavascriptBridge 實現(xiàn)js和java的交互
    http://www.jb51.net/article/37208.htm Android在其他線程中更新UI線程的解決方法

    posted @ 2016-11-24 16:19 leekiang 閱讀(368) | 評論 (0)編輯 收藏

    2016年10月26日

    向下一個Activity傳遞數(shù)據(jù)(使用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);
     
    對于數(shù)據(jù)的獲取可以采用:
    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跳轉(zhuǎn)到另外一個activity

    posted @ 2016-10-26 00:54 leekiang 閱讀(268) | 評論 (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 閱讀(388) | 評論 (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有何區(qū)別。

    參考:http://www.cnblogs.com/and_he/archive/2011/06/01/2067106.html Android中全屏或者取消標題欄

    posted @ 2016-10-25 22:38 leekiang 閱讀(548) | 評論 (0)編輯 收藏

    2016年10月24日

     首先在“設(shè)置”-“關(guān)于手機”里多次點擊【MIUI版本】進入開發(fā)者模式,但在Android Studio里運行時找不到設(shè)備,執(zhí)行adb devices也看不到設(shè)備。
    在撥號界面按  *#*#717717#*#*  , 出現(xiàn) Diag USB port enable。 再次執(zhí)行adb devices,看到設(shè)備了,但顯示為unauthorized。
    最后發(fā)現(xiàn),設(shè)置-其他高級設(shè)置-開發(fā)者選項,開啟“開發(fā)者選項”,同時開啟“USB調(diào)試”,再次執(zhí)行adb devices,終于成功的顯示設(shè)備了。
     

    posted @ 2016-10-24 11:45 leekiang 閱讀(478) | 評論 (0)編輯 收藏

    2016年10月21日

    1.public boolean shouldOverrideUrlLoading(WebView view, String url) { 
           view.loadUrl(url);
           return true;
      }
    重寫shouldOverrideUrlLoading方法,返回true表示點擊鏈接是在當前webview里打開,而不是調(diào)用瀏覽器打開


    WebViewClient與WebChromeClient的區(qū)別 http://blog.csdn.net/jackyhuangch/article/details/8310033
    Android中WebView攔截替換網(wǎng)絡(luò)請求數(shù)據(jù)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全面總結(jié)
    自定義可下拉刷新的WebView http://www.voidcn.com/blog/Moy01/article/p-4587219.html
    android webview遠程調(diào)試http://www.cnblogs.com/carlos-guo/p/3920915.html
    http://www.udpwork.com/item/13349.html  WebView處理網(wǎng)頁位置請求
    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 關(guān)于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 閱讀(358) | 評論 (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節(jié)點下增加config配置
    android {
        signingConfigs {
            config {
                keyAlias '你的key別名'
                keyPassword '你的key密碼'
                storeFile file('你的密鑰存儲路徑')
                storePassword '你的存儲密碼'
            }
        }
    ...

    3. 編譯報錯failed to find target android-22
    /Users/username/Library/Android/sdk/platforms下發(fā)現(xiàn)有android-24目錄,故將編譯級別都設(shè)為24。
    修改build.grade文件的相關(guān)屬性:
    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目錄下已經(jīng)有build.gradle了。
    備份下根目錄下build.gradle文件的內(nèi)容:
    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
    恢復(fù)項目根目錄下的build.gradle文件,將內(nèi)容修改為如下:
    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版本,發(fā)現(xiàn)是24.0.3,然后將buildToolsVersion修改為該版本:
    buildToolsVersion "24.0.3"

    7. Android Studio編譯執(zhí)行以下任務(wù)時一直等待,執(zhí)行了一個小時也沒動靜。
    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、增加環(huán)境變量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參數(shù)
    Preferences->Build-Excecution-Deployment->Compiler
    增加--info或--debug,在解決報錯時能看到更多的信息

    12. 報錯aapt ..finished with non- zero exit value 1
    找不到原因,增加編譯參數(shù)--info后發(fā)現(xiàn)有用的信息: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.導(dǎo)入某項目時報錯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下的確只有g(shù)radle-2.14.1

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

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

    posted @ 2016-10-13 21:25 leekiang 閱讀(3875) | 評論 (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 閱讀(665) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 久久久精品国产亚洲成人满18免费网站 | 丁香婷婷亚洲六月综合色| 一个人免费视频观看在线www| 在线亚洲97se亚洲综合在线| 国产精品永久免费| 亚洲精品中文字幕乱码三区| 两个人www免费高清视频| 又硬又粗又长又爽免费看| 又黄又大又爽免费视频| 亚洲午夜电影在线观看高清 | 成年人免费网站在线观看| 亚洲男人天堂2022| 无码免费一区二区三区免费播放| 亚洲AV无码第一区二区三区| 91香蕉在线观看免费高清| 亚洲一区二区久久| 国产成人免费A在线视频| 亚洲网站在线播放| 麻豆国产精品入口免费观看| 午夜成人无码福利免费视频| 国产亚洲高清不卡在线观看| 亚洲人成在线免费观看| 亚洲成a人片在线不卡一二三区 | 亚洲中文字幕无码中文| 国产又长又粗又爽免费视频| 黄 色一级 成 人网站免费| 久久久久亚洲AV无码网站| 免费看美女被靠到爽| 999zyz**站免费毛片| 亚洲香蕉久久一区二区三区四区| 国产免费观看视频| 久久国产精品一区免费下载| 亚洲色中文字幕在线播放| 久久精品亚洲福利| 欧洲乱码伦视频免费| www永久免费视频| avtt天堂网手机版亚洲| 亚洲色自偷自拍另类小说| 在线天堂免费观看.WWW| 一个人免费播放在线视频看片| 亚洲a视频在线观看|