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

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

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

    posts - 11,  comments - 21,  trackbacks - 0

    使用eclipse的nodejs的插件,右鍵運行app.js,控制臺一閃而過,沒有啟動起來.

    通過搜索,發現原來是JDK版本的問題,我用的是JDK6,不好使,使用JDK7就好使了.

    如果有多個JDK版本共存,可以使用在eclipse安裝目錄下的文件eclipse.ini指定要使用的JDK:

    -vm
    C:/Program Files/Java/jdk1.7.0_55/bin/javaw.exe

    posted @ 2014-04-25 03:52 xmlspy 閱讀(222) | 評論 (0)編輯 收藏

    很多人在安裝完Eclipse之后什么都不設置,直接用默認的設置,默認的設置有很多問題。
    在項目管理中應該統一Eclipse的設置。

    通過菜單Window->Preferences打開設置窗口。

    • General->Editors->Text Editors:
      選上Insert spaces for tabs : 縮進使用空格,不使用Tab.原因是當把代碼復制給網絡上的顯示的時候,
      Tab經常會被刪除,導致格式完全亂套.
      選上Show line numbers : 顯示行號,這個在debug的時候快速定位非常方便.
      選上Show print margin,然后在下面的Print margin column輸入框中輸入120 : 顯示一條豎線,
      用于標示打印機打印時的寬度.這里用于代碼自動換行的寬度. 設置為120個字符.這個同樣在Java
      代碼格式化的時候用到,后繼會說到.
      Y3RDP4``Q@][2]JX]3DYVA7[4]
    • General->Workspace
      在Text file encoding中選擇Other,然后在下拉框中選UTF-8 : 這樣所有項目都是用UTF-8編碼.默認的是GBK.
    • Java->Code Style->Formatter
      這里是Java代碼格式化相關的選項, 要修改默認的設置,需要新建一個配置.

      點擊按鈕 New… 在彈出框中的 Profile name 輸入框輸入新配置的名稱,這里輸入 11, 然后點擊OK按鈕.
      在新彈出的配置窗口中,選擇標簽Indentation, 在Tab policy下拉框中選擇 Spaces only : 縮進使用空格.
      這里需要注意,如果在General->Editors->Text Editors中選擇了Insert spaces for tabs, 而在格式化選項中
      沒有改成使用空格,那么在Java代碼格式化后,仍然使用Tab.

      選擇標簽 Line Wrapping,在Maximum line width輸入框輸入120 : 在120個字符后換行, 上面的 Print margin column
      也用的120,這樣就知道換行的標示了.

    其他如果有Editor的地方,縮進也都要改成4個空格. 比如: Web節點下面的CSS Files, HTML Files.

    posted @ 2013-11-17 15:32 xmlspy 閱讀(2714) | 評論 (2)編輯 收藏

    使用這個東西的好處是,可以發布到多個Blog上,免得使用Web編輯器苦逼地編輯.

    下載地址: http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother

    * 使用Live Writer在oschina上寫Blog: http://my.oschina.net/javayou/blog/39107

    * 使用Live Writer在BlogJava上鞋Blog: http://www.tkk7.com/vulcan/archive/2010/11/05/337323.html

    注意:  - 在日志類型中選擇Metaweblog API

              - API連接為: http://www.tkk7.com/你的blog名稱/services/metaweblog.aspx

    posted @ 2013-10-02 22:46 xmlspy 閱讀(228) | 評論 (0)編輯 收藏

    更新了最新Android ADT工具后,出現 TypeError: argument of type 'NoneType' is not iterable.

    O{J4%Z8HX[DQ%ORWFHNWGUC

    解決:

        復制 build-tool/17.0.0/ 下所有內容到 platform-tools 目錄下.

    參考:

    https://developer.appcelerator.com/question/152497/titanium-sdk-310-error-typeerror-argument-of-type-nonetype-is-not-iterable-on-building-android-app

    posted @ 2013-05-31 09:05 xmlspy 閱讀(588) | 評論 (0)編輯 收藏

    有時候Titanium中的終端會顯示:

    This Terminal Emulator is not functional because no 'bash' shell could be found.
    
    Please correct the problem and restart the IDE.

    解決辦法:

    • Team / Git / Git Executable (was empty)   --指定正確的git.exe文件位置
    • Titanium Studio / NodeJS / Node Executable (was empty also) ---- 指定NodeJS的node.exe的位置

     

    然后重啟終端就好了.

    posted @ 2013-05-30 19:33 xmlspy 閱讀(220) | 評論 (0)編輯 收藏

    1.目的

    在WebView控件中,如果頁面中調用了javascript腳本console.log 方法,就調用一個Java方法.

     

    2.默認實現方法

    在Android的WebView控件中,有一個setChromeClient(WebChromeClient)方法,

    此方法的參數是WebChromeClient對象,通過重載此對象中的onConsoleMessage方法就

    可以達到此目的.看代碼:

    WebView webView = new WebView();
    webView.setWebChromeClient(new DefaultWebChromeClient);
    
    // 以上代碼放在在Activity或則Fragment中的onCreate方法中
    
    private class DefualtWebChromeClient extends WebChromeClient {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            String message = consoleMessage.message();
            int lineNumber = consoleMessage.lineNumber();
            String sourceID = consoleMessage.sourceId();
            String messageLevel = consoleMessage.message();
    
            Log.i("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s",
                    messageLevel, sourceID, lineNumber, message));
    
            return super.onConsoleMessage(consoleMessage);
        }
    
        @Override
        public void onConsoleMessage(String message, int lineNumber, String sourceID) {
            Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", sourceID,
                    lineNumber, message));
            super.onConsoleMessage(message, lineNumber, sourceID);
        }
    }

    第一個方法onConsoleMessage(ConsoleMessage consoleMessage)是新版本的android才有的方法,第二個方法是舊版本的.

    第二個方法已經不推薦使用了,但是在舊版本的android中,仍然需要此方法.所以最好兩個方法都實現.

     

    3.問題

    默認的實現在某些版本的手機中不好使,onConsoleMessage方法死活不被調用

     

    4.解決方案

    使用WebView的addJavascriptInterface方法:

    // 首先,定一個類,叫什么名稱都可以,但是里面的方法名必須與
    // Javascript的console中的方法名對應
    private class Console{
        private static final String TAG="[WebView]";
        public void log(String msg){
            Log.i(TAG,msg);
        }
    	// 還可以添加其他的方法,比如: warn,assert等等
    }
    
    // 然后,為WebView添加對應的接口
    webView.addJavascriptInterface(new Console, "console");

     

    這個解決方案有一個不好的地方,就是輸出的內容沒有onConsoleMessage方法那么詳細,比如行號,就沒法輸出.

    所以,我們應該在onConsoleMessage好使的時候使用onConsoleMessage,不好使的時候在使用我們自定義的方式.

    那么,如何來判斷onConsoleMessage是否好使呢? 我們可以在程序初始化的時候,先在WebView中運行一下console.log,

    如果onConsoleMessage運行了,就添加一個標記,表示默認的實現是好使的.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 這些代碼也可以放到onCreate方法中
    	
        this.webView = (WebView) layout.findViewById(R.id.webview);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        
        // Set WebChromeClient
        WebChromeClient webChromeClient = new TestConsoleMessageWebChromeClient();
    	// 先執行console.log,測試是否調用了onConsoleMessage
        webView.loadUrl("javascript:console.log('testConsoleMessage')");
    	
        if (((TestConsoleMessageWebChromeClient)webChromeClient).isConsoleMessageOK()){
    	    // 這里額外使用了一個新的類 TestConsoleMessageWebChromeClient
    		// 如果不適用TestConsoleMessageWebChromeClient,就需要在
    		// DefaultWebChromeClient中添加標記字段 consoleMessageOK,
    		// 這樣如果方法onConsoleMessage好使,那么每次都給consoleMessageOK賦值,
    		// 這個有些多余,也影響性能.
            webChromeClient = new DefualtWebChromeClient();
        }else{
    	    // onConsoleMessage不好使,就使用這種方式,第二個參數值必須是"console"
            webView.addJavascriptInterface(new Console(), "console");
        }
        
        webView.loadUrl("http://www.baidu.com");
    
        return super.onCreateView(inflater, container, savedInstanceState);
    }
    
    // 當默認的onConsoleMessage不好使的時候使用的類
    private class Console {
        private static final String TAG = "[WebView]";
    
        public void log(String msg) {
            Log.i(TAG, msg);
        }
    	// 這里還可以添加其他方法console對象中有的方法,比如 assert
    }
    
    // 默認
    private class DefualtWebChromeClient extends WebChromeClient {
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            String message = consoleMessage.message();
            int lineNumber = consoleMessage.lineNumber();
            String sourceID = consoleMessage.sourceId();
            String messageLevel = consoleMessage.message();
    
            Log.i("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s",
                    messageLevel, sourceID, lineNumber, message));
    
            return super.onConsoleMessage(consoleMessage);
        }
    
        @Override
        public void onConsoleMessage(String message, int lineNumber, String sourceID) {
            Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", sourceID,
                    lineNumber, message));
            super.onConsoleMessage(message, lineNumber, sourceID);
        }
    }
    
    // 用于測試onConsoleMessage是否調用的類
    private class TestConsoleMessageWebChromeClient extends WebChromeClient {
        private boolean consoleMessageOK = false;
    
        @Override
        public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
            this.consoleMessageOK = true;
            return super.onConsoleMessage(consoleMessage);
        }
    
        @Override
        public void onConsoleMessage(String message, int lineNumber, String sourceID) {
            this.consoleMessageOK = true;
            super.onConsoleMessage(message, lineNumber, sourceID);
        }
    
        public boolean isConsoleMessageOK() {
            return this.consoleMessageOK;
        }
    }
    
    posted @ 2013-04-28 01:46 xmlspy 閱讀(3022) | 評論 (0)編輯 收藏

    <2013年4月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: www.亚洲日本| 国产一区二区三区免费视频| 99精品全国免费观看视频..| 亚洲av无码一区二区三区人妖 | 亚洲福利电影一区二区?| 亚洲精品99久久久久中文字幕 | 亚洲av无码偷拍在线观看| 亚洲欧洲精品在线| 久久99亚洲网美利坚合众国| 亚洲狠狠婷婷综合久久久久| 国产精品亚洲综合专区片高清久久久| 国产成人精品免费视频软件| 国内自产少妇自拍区免费| 免费精品国产自产拍在| 91精品免费国产高清在线| 最近最新高清免费中文字幕| 无码中文字幕av免费放dvd| 在线看片免费人成视频久网下载| 久久久精品视频免费观看 | 亚洲AV日韩AV天堂久久| 亚洲av手机在线观看| 女人被免费视频网站| 免费观看成人毛片a片2008| 鲁大师在线影院免费观看| 久久久99精品免费观看| 精品免费视在线观看| 国产高潮久久免费观看| 一级毛片免费在线观看网站| 最好2018中文免费视频| 中文字幕影片免费在线观看| 国产婷婷成人久久Av免费高清| 日韩免费人妻AV无码专区蜜桃| 国产乱码免费卡1卡二卡3卡| 国产成人综合久久精品免费| 亚洲色无码专区在线观看| 日韩精品一区二区亚洲AV观看 | 国产一精品一aⅴ一免费| 亚洲日韩人妻第一页| 亚洲人成在线播放网站岛国| 亚洲精品第一综合99久久| 产传媒61国产免费|