android開發過程中遇到的問題

System_err發表於2017-07-31

記錄android開發過程中遇到的問題。

1.在一個xml中能否使用同一個include多次

http://www.apkbus.com/android-104152-1-1.html

android中include標籤的使用

http://blog.csdn.net/wangljgood/article/details/6556175

2. android button在 linerlayout中底部居中
把button外的權重設為1.0
3.button shape
http://www.cnblogs.com/gzggyy/archive/2013/05/17/3083218.html
4. animation
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=564
http://blog.csdn.net/feng88724/article/details/6318430
http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml
http://blog.csdn.net/aminfo/article/details/7847761
http://blog.csdn.net/xsl1990/article/details/19125193
http://www.cnblogs.com/bavariama/archive/2013/01/29/2881225.html
http://www.oschina.net/question/97118_34523
http://www.eoeandroid.com/thread-67329-1-1.html
6.imageview 按比例縮放
android:scaleType是控制圖片如何resized/moved來匹對ImageView的size。

ImageView.ScaleType / android:scaleType值的意義區別:

CENTER /center  按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則擷取圖片的居中部分顯示

CENTER_CROP / centerCrop  按比例擴大圖片的size居中顯示,使得圖片長(寬)等於或大於View的長(寬)

CENTER_INSIDE / centerInside  將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片長/寬等於或小於View的長/寬

FIT_CENTER / fitCenter  把圖片按比例擴大/縮小到View的寬度,居中顯示

FIT_END / fitEnd   把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置

FIT_START / fitStart  把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置

FIT_XY / fitXY  把圖片不按比例擴大/縮小到View的大小顯示

MATRIX / matrix 用矩陣來繪製,動態縮小放大圖片來顯示。

android如何獲取時間差?

7.ImageLoader must be init with configuration before using 錯誤解決方法

imageLoader.init(ImageLoaderConfiguration.createDefault(MainActivity.this));

8.java.lang.StackOverflowError

StackOverflow 這個問題一般是你的程式裡頭可能是有死迴圈或遞迴呼叫所產生的;

9.java.lang.ClassCastException: android.app.Application cannot be cast to MyApplication問題

出這個異常的原因是在專案中新增了新application類(public class Application extends android.app.Application)之後,沒有在manifest.xml中新增該類的宣告,所以編譯器丟擲異常: java.lang.ClassCastException: android.app.Application cannot be cast to android_serialport_api.sample.Application

解決方法,在manifest.xml中新增: [html] view plaincopy

<application  
 android:name="xxx.MyApplication">  
10. event.getAction();
11. Found both android-support-v4 and android-support-v13 in the dependency list.
12. 怎麼關聯android-support-v4原始碼
問題:使用viewpager或者fragmentActivity等一些v4包下的類,當我們按F3時無法檢視到原始碼,這個時候就需要我們關聯該原始碼,該原始碼的關聯與android原始碼的關聯不一樣。

解決辦法:

1、首先在工程的libs目錄下建立一個配置檔案:android-support-v4.jar.properties(建議這樣)

2、查詢自己安裝的SDK的目錄下的android-support-v4的src原始碼地址

本人的為:D:\eclipse\android-sdk\extras\android\compatibility\v4\src

3、編輯android-support-v4.jar.properties檔案為:(注意是雙斜槓)

src = D:\\eclipse\\android-sdk\\extras\\android\\compatibility\\v4\\src

4、關閉自己的工程後再開啟,此時進去選擇ViewPager後F3就能看到原始碼了。

5、恭喜:android-support-v4 原始碼已經成功的關聯上。

還有種方式,http://blog.csdn.net/leon90dm/article/details/8521939,沒試。

上面是eclipse中的做法,在androidstudio中的使用更簡單。

13.eclipse 修改設定Ctrl+Shift+F長度
在window的Preferences中的Java->Code Style->Formatter

到了這一步就是找到Ctrl+Shift+F的格式化模板了,這裡不能直接修改。因為是eclipse預設的模板,是隻讀的。

我們可以new 一個Formatter,然後點選edit就可以修改模板。

我修改模板主要就是修改那個Ctrl+Shift+F後,把我的程式碼換多行了。

修改選項卡中的Line Wrapping選項卡, 有一個Maximum line with: 80(預設);

這裡預設是80我們可以把它修改成120的,那樣不超過120個字元就不會被換行了!

其他自己需要的格式都可以在這裡面修改。當然你還可以匯出你自定義的格式,匯出的是xml格式的。以後在其他地方

還可以匯入。這樣就不用再自定義了。
14. android-develop 映象路徑[重點推薦]
http://androiddoc.qiniudn.com/

google,被和諧後,通過vpn或者訪問上述映象路徑。

15.fragment Andriod開發技巧——Fragment的懶載入

一個Activity裡面可能會以viewpager(或其他容器)與多個Fragment來組合使用,而如果每個fragment都需要去載入資料,或從本地載入,或從網路載入,那麼在這個activity剛建立的時候就變成需要初始化大量資源。這樣的結果,我們當然不會滿意。那麼,能不能做到當切換到這個fragment的時候,它才去初始化呢?

答案就在Fragment裡的setUserVisibleHint這個方法裡 http://blog.csdn.net/maosidiaoxian/article/details/38300627

結合fragment的hide和show使用。

16.讓多個Fragment 切換時不重新例項化

http://www.yrom.net/blog/2013/03/10/fragment-switch-not-restart/

17. 關於Android的GridView新增headerView

grid-with-header-list-adapter StickyGridHeaders/ http://www.eoeandroid.com/blog-696650-48907.html

18.Eclipse設定不格式化註釋
Eclipse設定不格式化註釋

  註釋中寫點帶格式的文字,format後全亂了,解決辦法如下:   Windows -> Preferces -> java -> Code Style -> Formatter -> Edit -> Comments   取消勾選“Enable Javadoc comment formatting”.

19.android-Ultra-Pull-To-Refresh
20.Linux動態gif圖的錄製
byzanz  
byzanz的安裝與使用

Ubuntu下安裝

  sudo add-apt-repository ppa:fossfreedom/byzanz
sudo apt-get update sudo apt-get install byzanz

你可以通過如下命令來完成錄製過程:
byzanz-record -d 40 -x 0 -y 0 -w 400 -h 320 byzanz-demo.gif

其中:

    -d 40 為錄製的時長為 40 秒
    -x 0 錄製區域的橫座標
    -y 0 錄製區域的縱座標,記住:螢幕右上角為原點(0,0)
    -w 400 錄製區域的寬度
    -h 320 錄製區域的高度

byzanz-demo.gif 儲存的檔名

詳細引數可通過byzanz-record --help檢視。
http://www.tuicool.com/articles/YFJrem

另外:windows下 GIF螢幕錄影機 V2.0
22. viewpage 無線迴圈

http://www.cnblogs.com/xinye/archive/2013/06/09/3129140.html

23.public void onPageScrollStateChanged(int arg0)
此方法是在狀態改變的時候呼叫,其中arg0這個引數有三種狀態(0,1,2)。arg0 ==1的時辰默示正在滑動,arg0==2的時辰默示滑動完畢了,arg0==0的時辰默示什麼都沒做。

當頁面開始滑動的時候,三種狀態的變化順序為(1,2,0)
24.

在eclipse.ini檔案中加入 -Dorg.eclipse.swt.browser.DefaultType=mozilla 然後clean一下就OK了 執行clean命令

26.viewpager實現畫廊(一屏多個Fragment)效果
27.svn命令

通過指令新增檔案,每次都到對應資料夾 svn add。這樣如果需要add的檔案不在一個資料夾時會很麻煩,通過下面的 --force 可以方便的新增。 $ svn add * --force http://developer.51cto.com/art/201005/201633.htm

當然現在studio整合樂svn git等程式碼管理工具,很方便,可以直接使用。

28.Array constants can only be used in initializers
int CC [] ={1,2,3};   陣列定義並附初始值的時候,陣列的長度就定了,長度是3
 而且陣列重新賦值不能再像定義的時候那樣
而要一個一個地更改
CC[0]=1;
CC[1]=2;
CC[2]=3;
Array constants can only be used in initializers  好像是說陣列不能用於初始化
29.android 外掛化
30.scrollview在內容較少時也可以滾動
在XML為ScrollView新增屬性android:overScrollMode="always"即可
31.gridview/listview 點選時 android預設背景是黃色的,如何去掉選中時的黃色背景
方法一,在控制元件被初始化的時候設定

gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
listView.setSelector(new ColorDrawable(Color.TRANSPARENT));

方法二,在佈局檔案中設定listSelector屬性

 

<GridView
	android:listSelector="@android:color/transparent"
	android:numColumns="auto_fit"
	android:columnWidth="50dp"
	android:stretchMode="spacingWidth"
	android:layout_weight="1.0"
	android:layout_height="0dip"
	android:layout_width="match_parent"/>

<ListView
	android:listSelector="@android:color/transparent"
	android:layout_height="match_parent"
	android:layout_width="match_parent"/>

當然也可以定製化自己想要的效果。

推薦使用方法二,解耦邏輯程式碼與佈局檔案。 

另外listview還有兩個基礎問題 問題1:

	       listview在拖動的時候背景圖片消失變成黑色背景。等到拖動完畢我們自己的背景圖片才顯示出來。

	解決辦法:

	      xml中: android:scrollingCache="false"  或者 android:cacheColorHint="#00000000"

	     程式碼中: setScrollingCacheEnabled(false)  或者 setCacheColorHint(0)  或者setCacheColorHint(Color.TRANSPARENT);

	問題2:

	    listview的上邊和下邊有黑色的陰影。

	解決辦法:

	   xml中: android:fadingEdge="none"

	  程式碼中:setFadingEdgeLength(0);
32.ScrollView僅支援一個子項,報錯ScrollView can host only one direct child
解決辦法:

在ScrollView 中設LinearLayout為子項 ,將其它View放入LinearLayout。
33.viewpager 設定間距和快取

viewPager.setOffscreenPageLimit(TOTAL_COUNT); viewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));

34.一級快取和二級快取是什麼意思??

靜態ram快取叫一級快取,而把後來增加的動態RAM叫二級快取。 RAM分兩種, 一種是靜態RAM,SRAM;一種是動態RAM,DRAM。前者的儲存速度要比後者快得多,我們現在使用的記憶體一般都是動態RAM。

有的菜鳥就說了,為了增加系統的速度,把快取擴大不就行了嗎,擴大的越大,快取的資料越多,系統不就越快了嗎

快取通常都是靜態RAM,速度是非常的快,

但是靜態RAM整合度低(儲存相同的資料,靜態RAM的體積是動態RAM的6倍),

價格高(同容量的靜態RAM是動態RAM的四倍),

由此可見,擴大靜態RAM作為快取是一個非常愚蠢的行為,

但是為了提高系統的效能和速度,我們必須要擴大快取,

這樣就有了一個折中的方法,不擴大原來的靜態RAM快取,而是增加一些高速動態RAM做為快取,

這些高速動態RAM速度要比常規動態RAM快,但比原來的靜態RAM快取慢,

我們把原來的靜態ram快取叫一級快取,而把後來增加的動態RAM叫二級快取。

一級快取和二級快取中的內容都是記憶體中訪問頻率高的資料的複製品(對映),它們的存在都是為了減少高速CPU對慢速記憶體的訪問。 通常CPU找資料或指令的順序是:先到一級快取中找,找不到再到二級快取中找,如果還找不到就只有到記憶體中找了

35.效能優化:使用SparseArray代替HashMap<Integer,Object>

http://blog.csdn.net/haukey/article/details/8200404

36.程式碼規範

http://liuzhichao.com/p/1781.html#more-1781

37. // Disallow Parent Intercept, just in case
                    ViewParent parent = getParent();
                    if (parent != null) {
                        parent.requestDisallowInterceptTouchEvent(true);
                    }
38.linerlayout佈局,如何把一個view指定父view的底部
在純屬佈局中,將除最底部以外的的view都設定weight為1就可以了。
39.editview 左側加drawable

如果只是在左邊或者右邊加圖片 可以用EditeView 的一個屬性; android:drawableLeft在text的左邊輸出一個drawable 如果在中間或者隨意加圖片的話,需要你重寫EditView來實現圖文混排!

40.加密演算法

41.01-07 15:34:23.160: E/AndroidRuntime(1932): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load AES: findLibrary returned null

01-07 15:37:43.240: E/AndroidRuntime(2537): java.lang.UnsatisfiedLinkError: Native method not found: com.jetsun.hbfc.core.AESCoder.decryptCNew:()Ljava/lang /String;

01-07 15:37:43.230: D/dalvikvm(2537): No JNI_OnLoad found in /data/data/com.jetsun.hbfc/lib/libAES.so 0x4160abe0, skipping init

01-07 15:37:43.230: W/dalvikvm(2537): No implementation found for native Lcom/jetsun/hbfc/core/AESCoder;.decryptCNew:()Ljava/lang/String;

return makes pointer from integer without a cast [enabled by default]

01-07 17:51:47.520: D/dalvikvm(12438): No JNI_OnLoad found in /data/data/com.jetsun.hbfc/lib/libAES.so 0x41601a80, skipping init 01-07 17:51:47.525: I/JNIMsg(12438): jclass == NULL 01-07 17:51:47.525: I/JNIMsg(12438): step 1 : jclass Begin ok ! 01-07 17:51:47.525: I/JNIMsg(12438): encryptC == NULL 01-07 17:51:47.525: I/JNIMsg(12438): step 2 : decryptC new failed 01-07 17:51:47.525: I/JNIMsg(12438): step 2 : decryptC method prepared ok !

41.jni基礎

android __android_log_print列印函式__原始碼 http://blog.csdn.net/sno_guo/article/details/8143050 JNI欄位描述符“([Ljava/lang/String;)V” http://fgsink.blog.163.com/blog/static/16716997020124310169911/ jni函式講解http://blog.csdn.net/caimouse/article/category/661872/2 基於 Android NDK 的學習之旅----- C呼叫Javahttp://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html No JNI_OnLoad found in … skipping inithttp://stackoverflow.com/questions/11798054/no-jni-onload-found-in-skipping-init eclipse ndk配置詳細描述http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 基於 Android NDK 的學習之旅

彙總 ndk精華

http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.htmlhttp://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.htmlhttp://blog.csdn.net/caimouse/article/details/6853795http://fgsink.blog.163.com/blog/#m=0&t=1&c=fks_084071081085086066085080094095085080086066082095095068084

42.md5 aes加密

有固定的金鑰key的AES加密 http://fenglingcorp.iteye.com/blog/586600 android Rsa 演算法加 密明文--->公鑰--->密文 密文-->金鑰-->明文 http://blog.sina.com.cn/s/blog_6568e7880100x8r9.html java加密與解密的藝術作者http://snowolf.iteye.com/blog/379860 Android AES加密演算法及其實現http://blog.csdn.net/randyjiawenjie/article/details/6587986 AES加密解密Android版http://www.cnblogs.com/carlosk/archive/2012/05/18/2507975.html

加密方式 AES 加密模式 AES/CBC/PKCS5Padding 加密向量 iv secretkey 祕鑰 編碼方式 utf-8

43.proguard的使用

程式碼混淆時,不混淆的部分。

44.socket

Socket簡單用法 http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html 即時通訊
基於xmpp openfire smack開發之openfire介紹和部署[1] http://blog.csdn.net/shimiso/article/details/8816558 Openfire+Spark聊天Demo http://www.apkbus.com/android-69413-1-1.html openfire的Android客戶端實現http://download.csdn.net/detail/sky_monkey/5820879#comment

45.音訊編解碼

FFmpeg的Android平臺移植—編譯篇 http://blog.csdn.net/gobitan/article/details/22750719#reply

46.f5 負載均衡
47. 掌上指路標 —– APP架構與導航設計 http://www.yixieshi.com/ucd/13188.html

 APP導航設計的步驟主要為以下三步:

  1. APP框架整理:資訊架構 or 任務分析

  2. 框架層級判斷: 扁平 vs 樹狀

  3. 導航具體表現形式:控制元件形式and擺放位置

48.移動App架構設計

http://blog.csdn.net/uxyheaven/article/details/38041091 移動App設計之分層架構+MVChttp://www.cnblogs.com/Logen/archive/2012/11/08/2760638.html

49.Android 精品開源專案

http://blog.csdn.net/caesardadi/article/details/21091645

50.使用GDB除錯JNI程式碼

Android NDK應用原理 http://shihongzhi.com/ndk/ NDK 開發指南---Android NDK概覽http://hualang.iteye.com/blog/1135105

51.ubuntu下搜狗輸入法,使用過程中突然出現 “搜狗皮膚程式載入失敗 請重啟以使用輸入法”導致無法使用

解決方法:終端sogou-qimpanel &

52.layout_alignBaseline的作用
53.android:layout_weight的真實含義

android:layout_weight的真實含義是:一旦View設定了該屬性(假設有效的情況下),那麼該 View的寬度等於原有寬度(android:layout_width)加上剩餘空間的佔比! 簡單的說,就是剩餘空間的權重.http://blog.csdn.net/yanzi1225627/article/details/24667299

54.即時通訊

基礎:socket 原理: 如何保證socket長連線 http://blog.csdn.net/chengyingzhilian/article/details/7633640 android中對服務端的長連線【socket】 http://blog.csdn.net/yaya_soft/article/details/11778593

1.Android 基於Socket的聊天應用(二)  http://www.cnblogs.com/-run/archive/2012/04/07/2434837.html#!comments   下載demo
Ubuntu 14.04下MySQL伺服器和客戶端的安裝  http://www.linuxidc.com/Linux/2014-10/107912.htm
Ubuntu 安裝mysql和簡單操作   http://www.cnblogs.com/zhuyp1015/p/3561470.html
如何在mysql中建立資料庫  http://www.360doc.com/content/11/0719/18/2104556_134548635.shtml
Java連線MYSQL 資料庫的連線步驟  http://database.51cto.com/art/201006/204217.htm


2.基於XMPP的即時聊天專案  需要google賬號,目前無法登入 本專案是一套基於android+asmack+openfire+xmpp的安卓即時聊天服務端,專案直連google talk伺服器,可以使用谷歌帳號登入客戶端,測試需要至少兩個谷歌帳號。在程式裡新增好友即可聊天

3.Android手機通過socket與pc通訊 http://blog.csdn.net/tobacco5648/article/details/7742295
55.ubuntu顯示埠占用、正在執行的程式,以及強制關閉一個程式
1. 顯示佔用某個埠的程式

lsof -i:80
lsof -i:5000

2. 顯示某個程式是否在執行,檢視某個執行的程式

ps -aux | grep "paster"
ps -aux | grep apache2

3. 殺掉一個程式,和強制殺掉一個程式

kill 211119
sudo kill -s 9 21119
56.設定Activity進入退出動畫

使用程式碼設定

通過呼叫overridePendingTransition() 可以實時修改Activity的切換動畫。但需注意的是:該函式必須在呼叫startActivity()或者finish()後立即呼叫,且只有效一次。

57.滑動返回

android-swipelistview
SwipeBackLayout SlidingFinish

自從用了swipebacklayout, 友好度提高了許多。 但是又遇到一個問題 每個介面在滑動返回時候都能夠看到桌面 ,然後才跳到我的主介面。 解決方案: 主介面視窗不要設定透明 false,其他介面true

58.Android 虛擬鍵盤彈出把底部欄頂上去的解決辦法

解決辦法:

在AndroidManifest的相應的activity中加上:android:windowSoftInputMode="adjustPan"http://www.linuxidc.com/Linux/2011-10/46070.htm

59. 在EditText中插入表情圖片 (CharacterStyle&SpannableString) http://gundumw100.iteye.com/blog/904107
EditText通常用於顯示文字,但有時候也需要在文字中夾雜一些圖片,比如QQ中就可以使用表情圖片,又比如需要的文字高亮顯示等等,如何在android中也做到這樣呢?
記得android中有個android.text包,這裡提供了對文字的強大的處理功能。
新增圖片主要用SpannableString和ImageSpan類:
Java程式碼  收藏程式碼

    Drawable drawable = getResources().getDrawable(id);  
	    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
	    //需要處理的文字,[smile]是需要被替代的文字  
	    SpannableString spannable = new SpannableString(getText().toString()+"[smile]");  
	    //要讓圖片替代指定的文字就要用ImageSpan  
	    ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);  
	    //開始替換,注意第2和第3個參數列示從哪裡開始替換到哪裡替換結束(start和end)  
    //最後一個引數類似數學中的集合,[5,12)表示從5到12,包括5但不包括12  
	    spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    
	    setText(spannable); 
60.viewpager中巢狀gridview

自定義帶表情鍵盤 android 表情,軟鍵盤衝突解決方案(仿微博等SNS應用)http://blog.csdn.net/jj120522/article/details/9825871 日曆 android中ViewPager巢狀GridView引發的一系列UI卡頓不順暢的問題 http://www.android100.org/html/201403/10/5840.html Android UI開發篇之 ViewPager+九宮格佈局 實現左右滑動http://blog.csdn.net/janice0529/article/details/17335473 ViewPager+GridView實現宮格橫向滑動切換http://download.csdn.net/detail/yefengyulu/5433913

61.異常:java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.ViewGroup$MarginLayoutParams的終極解決方式

思路:從原來的View中直接獲取LayoutParams。http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1117/1991.html 今天在使用LayoutParams時出現了一個問題,我是這樣用的:

在gridview初始化的時候,為gridview新增了一個header(我用的是第三方GridView是可以新增header的):


headerView = new View(getActivity());
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, (int)300); 
headerView.setLayoutParams(params);     
mGridView.addHeaderView(headerView);
然後當程式執行到某處,我希望通過setLayoutParams來改變這個高度,於是我這樣做:


LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, 500); 
headerView.setLayoutParams(params);
重點是,兩個LayoutParams 都是ViewGroup的LayoutParams ,然後一執行就出現下列錯誤:

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view.ViewGroup$MarginLayoutParams

跟android中的很多異常一樣,你去仔細推敲異常本來的含義往往是百思不得其姐的,異常說的是兩個是不同型別的LayoutParams ,但明明都是ViewGroup的LayoutParams。而且我確定ViewGroup的LayoutParams用在GridView的header上是可以的,因為我不執行上面的第二段程式碼不會報錯(再次強調我用的是第三方GridView是可以新增header的)。



然後就在stackoverflow上查詢答案,雖然沒找到滿意的,但是有個人的回答倒是點醒了我,是不是第二段程式碼中又重新建立了一個LayoutParams的關係?於是我將第二段程式碼改成:


**LayoutParams params = headerView.getLayoutParams();**
params.height = 500;
其實就是不去新建一個LayoutParams,而是從原來的View中直接獲取LayoutParams。

改完執行結果沒有出現異常了。

看來,當一個View已經有了LayoutParams,是不能再次新增一個新建立的LayoutParams的。
62.android4.0的edittext遮蔽輸入法時候游標顯示問題 通過反射解決 http://www.eoeandroid.com/thread-248276-1-1.html
	if (android.os.Build.VERSION.SDK_INT <= 10) {
                                    mEditText.setInputType(InputType.TYPE_NULL);
                            } else {
                                    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                                    try {
                                            Class<EditText> cls = EditText.class;
                                            Method setSoftInputShownOnFocus;
                                            setSoftInputShownOnFocus = cls.getMethod("setSoftInputShownOnFocus", boolean.class);
                                            setSoftInputShownOnFocus.setAccessible(true);
                                            setSoftInputShownOnFocus.invoke(mEditText, false);
                                    } catch (Exception e) {
                                            e.printStackTrace();
                                    }
                                    try {
                                            Class<EditText> cls = EditText.class;
                                            Method setShowSoftInputOnFocus;
                                            setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
                                            setShowSoftInputOnFocus.setAccessible(true);
                                            setShowSoftInputOnFocus.invoke(mEditText, false);
                                    } catch (Exception e) {
                                            e.printStackTrace();
                                    }
                            }
63.自定義控制元件

getContext的使用

自定義android使用者控制元件,使用回撥函式實現自定義事件

64.如何獲取到,EditView 的 貼上複製呢(解決) 重寫editview控制元件,onTextContextMenuItem 。http://www.eoeandroid.com/thread-61482-1-1.html

Android學習筆記之通過剪下板傳遞資料 http://www.it165.net/pro/html/201404/11599.html

Android EditText 取消複製貼上剪貼功能 http://www.xuebuyuan.com/2038921.html 在API-11以上,也就是Android 3.0以上的版本,這個操作就無效了,需要用到以下方法:

editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() 
    editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

如何捕獲Edittext的貼上方法?http://www.apkbus.com/android-92944-1-1.html 向EditView插入qq表情,並可刪除表情或文字 android開發教程 http://cache.baiducontent.com/c?m=9d78d513d99417f41efa950e494d80230e55f0744ddcc76508c3e34984102d564616f4cd27356074c4c40c7071a55e28eee47132690c7af1dd8a9f4baea68f6d6acd3034074fda17528e42f9c84427d620e707a9fa04bdfcaf6c8eaed0d0d95652d751066787f58f5b1714bd35b64b6f&p=80769a47959d18ff57ee927c1c4791&newp=c67f8f5e85cc43be43bd9b7d0b148a231610db2151d6d2176ecf&user=baidu&fm=sc&query=editview%C9%BE%B3%FD%D2%BB%B8%F6&qid=f5bf3b5b0000bd4e&p1=3

65.android EditText插入字串到游標所在位置
EditText mTextInput=(EditText)findViewById(R.id.input);//EditText物件

int index = mTextInput.getSelectionStart();//獲取游標所在位置

String text="I want to input str";

Editable edit = mTextInput.getEditableText();//獲取EditText的文字

if (index < 0 || index >= edit.length() ){

       edit.append(text);

}else{

      edit.insert(index,text);//游標所在位置插入文字

 }
66.Android學習筆記:淺析自己的聊天系統的設計思想 http://www.android100.org/html/201406/09/22125.html
67.java 正規表示式(Invalid escape sequence (valid ones are \b \t \n \f \r " ' \ ) 請問是啥原因呢?
把你的裡面的\全部替換為\\即可
69.error

NewsCommentDetailActivity

01-20 11:35:28.990: E/AndroidRuntime(6166): java.lang.RuntimeException: Unable to instantiate application com.jetsun.hbfc.core.MyApplication: java.lang.NullPointerException 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.makeApplication(LoadedApk.java:508) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4245) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.access$1400(ActivityThread.java:131) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1288) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.os.Handler.dispatchMessage(Handler.java:99) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.os.Looper.loop(Looper.java:137) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.ActivityThread.main(ActivityThread.java:4866) 01-20 11:35:28.990: E/AndroidRuntime(6166): at java.lang.reflect.Method.invokeNative(Native Method) 01-20 11:35:28.990: E/AndroidRuntime(6166): at java.lang.reflect.Method.invoke(Method.java:511) 01-20 11:35:28.990: E/AndroidRuntime(6166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 01-20 11:35:28.990: E/AndroidRuntime(6166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 01-20 11:35:28.990: E/AndroidRuntime(6166): at dalvik.system.NativeStart.main(Native Method) 01-20 11:35:28.990: E/AndroidRuntime(6166): Caused by: java.lang.NullPointerException 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:384) 01-20 11:35:28.990: E/AndroidRuntime(6166): at android.app.LoadedApk.getClassLoader(LoadedApk.java:327)

01-20 04:05:16.637: E/AndroidRuntime(1372): Process: com.jetsun.hbfc:webview, PID: 1372 01-20 04:05:16.637: E/AndroidRuntime(1372): java.lang.RuntimeException: Unable to instantiate application com.jetsun.hbfc.core.MyApplication: java.lang.IllegalStateException: Unable to get package info for com.jetsun.hbfc; is package not installed? 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.makeApplication(LoadedApk.java:561) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4491) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.access$1500(ActivityThread.java:144) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.os.Handler.dispatchMessage(Handler.java:102) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.os.Looper.loop(Looper.java:135) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.ActivityThread.main(ActivityThread.java:5221) 01-20 04:05:16.637: E/AndroidRuntime(1372): at java.lang.reflect.Method.invoke(Native Method) 01-20 04:05:16.637: E/AndroidRuntime(1372): at java.lang.reflect.Method.invoke(Method.java:372) 01-20 04:05:16.637: E/AndroidRuntime(1372): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 01-20 04:05:16.637: E/AndroidRuntime(1372): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 01-20 04:05:16.637: E/AndroidRuntime(1372): Caused by: java.lang.IllegalStateException: Unable to get package info for com.jetsun.hbfc; is package not installed? 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:410) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.getClassLoader(LoadedApk.java:363) 01-20 04:05:16.637: E/AndroidRuntime(1372): at android.app.LoadedApk.makeApplication(LoadedApk.java:554)

70.解決eclipse閃退的辦法 http://blog.csdn.net/ieicihc/article/details/9629991
方法1.最好解決辦法: 
刪除檔案 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

方法2.在檔案eclipse/configuration/config.ini末尾加上如下一行:

org.eclipse.swt.browser.DefaultType=mozilla

但是不怎麼起作用,在不斷切換引用時,有時也會閃退。回來轉到androidstudio,用eclipse不多了,偶爾用用沒問題。

71.Android WebView的前進、後退、與重新整理
mWebView.goBack();   //後退  
mWebView.goForward();//前進
mWebView.reload();  //重新整理

webview有自己的堆stack
72.You must call removeView() on the child's parent first
在做alertdialog是的時候報了這麼一個錯誤:

java.lang.IllegalStateException: 
The specified child already has a parent. 
You must call removeView() on the child's parent first.

搞了許久,終於理解了。

et1 = (EditText)findViewById(R.id.editText1);
builder.setView(et1);  -- AlertDialog.Builder builder
et1我寫在了xml裡面,這樣報錯,原因是一女不可二嫁。

et1的parent即是R.layout.main 又是AlertDialog。

自然就報錯了要你removeView()了。

解決方法有兩種

1.動態生成EditText

et1 = new EditText(this);
builder.setView(et1);
2. 放在另一個xml中,用inflater

LayoutInflater inflater = LayoutInflater.from(this);  
	    View textEntryView = inflater.inflate(R.layout.test1, null);  
	    et1 = (EditText)textEntryView.findViewById(R.id.editText1);
builder.setView(textEntryView ); 注意這裡是textEntryView ,不是et1 

補充還有一種方法,如果此佈局中只有該view,可以直接在xml只佈局此view。
73.Activity切換動畫無效(android:windowIsTranslucent)影響(android:windowAnimationStyle)http://blog.csdn.net/xuewater/article/details/36398803
style裡面設定了android:windowIsTranslucent這個屬性
74.Android 解決程式啟動時的黑屏問題 http://blog.csdn.net/fancylovejava/article/details/39643449
android 介面切換黑屏處理從A切換到B的過程中出現黑屏,可以在Manifest檔案中改變B的theme,在theme裡新增<item name="android:windowIsTranslucent">true</item>,這樣從A到B的過程中,因為B是透明的,所以背景就是A。這樣的使用者體驗比較好
75.
atvity主題加透明屬性 如下: <item name="android:windowIsTranslucent">true</item>  

在該atvtivity中使用webview。 webview中有videos,可以播放視訊,點選視訊全屏後,導致其上級fragmentactivity重新載入,導致內容空白。

76.打包過程中出現錯誤 Unexpected error while computing stack sizes:

java.lang.IllegalArgumentException] (Stack size becomes negative after instruction [12] invokevirtual #96 in [cn/jpush/android/a/a.()V])

解決辦法: 如何在程式碼時混淆忽略 jpush-sdk-release.jar? http://www.xuebuyuan.com/1683269.html

請下載最新的proguard.jar,   umeng官方最新的試了也是有問題,估計相容型的不好吧,採用http://download.csdn.net/detail/msn465780/6625061這個 ok。
並替換你Android Sdk "tools\proguard\lib\proguard.jar"
在你的proguard.cfg加上程式碼:
-dontwarn
cn.jpush.**
-keep class cn.jpush.** { *; }
77.android eclipse設定的斷點無效的解決方案
1.排除 Run——Skip All Breakpoints
2.排除斷點無效的activity所在的程式是否是主程式。
78.極光推送富媒體
 推送富媒體時,推送模版其實是通知,推送檔案其實是自定義訊息型別
通知 vs. 自定義訊息  http://docs.jpush.cn/pages/viewpage.action?pageId=3309701
富文字頁面 Javascript 回撥API  http://docs.jpush.cn/pages/viewpage.action?pageId=7536748
Rich Push 開發指南  http://docs.jpush.cn/pages/viewpage.action?pageId=7536799
79.內部跳轉 Routable for Android
80.fjrefox firebug外掛。chrome 自身F12都可以方便的檢視並且編輯html
81 帶有憑證的activity 必須在一個程式中。否則憑證會為空。還有一點在除錯的時候,非主程式無法和主程式跳轉除錯。
82.apktool反編譯過程中出現如下錯誤
Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
	at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
	at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
	at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
	at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
	at brut.androlib.Androlib.getResTable(Androlib.java:50)
	at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
	at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
	at brut.apktool.Main.cmdDecode(Main.java:146)
	at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
	at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
	at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
	at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102)
	at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
	at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
	... 8 more

由於使用新的adt,而反編譯的apktool.jar不是最新的導致。使用新的apktool.jar替換原來的就可以了。官方下載地址 https://code.google.com/p/android-apktool/。

83.渠道打包工具

之前有的umeng,但是現在無法使用【因為android更新了編譯的sdk版本,而umeng不在提供更新】。目前的做法是通過 gradle來打包Gradle多渠道打包

84.genymotion快速高效的android模擬器

https://www.genymotion.com/#!/developers/user-guide#license http://blog.csdn.net/langyuewu/article/details/39196653

需要翻牆。部分需要付費

85.使用Vitamio打造自己的Android萬能播放器

直播方面 可以參考我翻譯的Android如何直播RTMP流 86. Ctrl+Shift+F7 可以高亮當前元素在當前檔案中的使用 Android Studio 如何提示函式用法? 先選中,然後按F2

87.android 提供的很多List控制元件如 listview、gridview 預設都會顯示一個fadingedge的東西,它在View的top和bottom處各顯示一個漸變半透的陰影以達到更好的視覺效果,但是這個帶來的副作用就是導致在效能不是那麼強勁的機器上,一些listview,gridview的拖動會顯得很不流暢,因為我們知道繪製帶Alpha的圖片是最耗時的。

我們的優化思路就是對這個fadingedge做一些修改,當view處於滾動狀態時,通過介面setVerticalFadingEdgeEnabled(false)讓其不顯示fadingedge,當view處於靜止狀態時,通過介面setVerticalFadingEdgeEnabled(true)恢復顯示fadingedge。以上的listview和gridview等控制元件都是繼承與AbsListView,所以我們直接修改framework中的AbsListView.java檔案,就可以達到系統級的改動效果了。

88. 從github上clone下來swipebacklayout

編譯報錯檢視log為 android-studio llij.ide.plugins.PluginManager - null

修改方法 tasks.withType(Compile) { options.encoding = "UTF-8" } 改為 tasks.withType(JavaCompile) { options.encoding = "UTF-8" }

89.Error:Execution failed for task ':xxx:compileDebugNdk'.

NDK not configured. Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties. (On Windows, make sure you escape backslashes, e.g. C:\ndk rather than C:\ndk)

在androidstudio中的local.properties中新增ndk.dir= 你的ndk的路徑

90.Error:(8, 0) Could not find property 'ANDROID_BUILD_SDK_VERSION' on project ':ActionBar-PullToRefresh'.

dependencies { compile 'com.github.castorflex.smoothprogressbar:library:0.4.+@aar' } 解決方法 I think you should also import 'SmoothProgressBar' library in your project https://github.com/castorflex/SmoothProgressBar

#####91.@+id @id android:id ?android:attr

。@+id:宣告一個id值來識別控制項

。@id:透過id值引用控制項

。android:id:透過id值, 引用Android系統內部的資源

。?android:attr:引用Android預置定義樣式

#####92. Looks like there is no way to avoid modifications made by the import plugin. All the settings it has is three checkboxes related to dependency management. I tried to uncheck all of them but still it does change my project structure.

I managed to add existing library projects manually:

  1. Copied library's directory under the root directory of my project.
  2. Referenced that library in settings.gradle by adding include ':libraryA'.
  3. Added dependency to my project's build.gradle: compile project(':libraryA').

Moreover, after that the IDE recognized that library as module and highlighted its folder in bold font whithin Project Structure.

#####93.如何從當前的activity獲得根檢視 或者 Android如何獲取Activity的View?

((ViewGroup)findViewById(android.R.id.content)).getChildAt(0) 或者 getWindow().getDecorView().findViewById(android.R.id.content)

#####94.radiogroup中的radiobutton如何不顯示圖示button,並且可以等比例再用wight android:button="@none" 或@null android:drawableTop ="@drawable/xxx" 或者也設定為空

#####95.搜尋也是一門藝術 濃縮搜尋 詳細搜尋

#####96.android layoutinfater 沒有顯示內容 檢查parent試圖是否為空

#####97..Error:Execution failed for task ':app:dexDebug'.UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) at com.android.dx.command.dexer.Main.run(Main.java:246) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)

檢查 Multiple dex #####98.android動畫的三種形式 tween animition ,frame animition ,property animition

#####99.LoopingViewPager QuickReturn

#####100. appcompat-v7:21.0.0': No resource found that matches the given name: attr 'android:actionModeShareDrawable'http://stackoverflow.com/questions/26431676/appcompat-v721-0-0-no-resource-found-that-matches-the-given-name-attr-andro

#####101.recycleview vs listview head foot .recycleview實現gridview 新事物不要躲避,機遇。

#####102.清除Android工程中沒用到的資源 http://www.cnblogs.com/angeldevil/p/3725358.html

#####103.xmlns:tools與tools:context tools:context="activity name"這一句不會被打包進APK。只是ADT的Layout Editor在你當前的Layout檔案裡面設定對應的渲染上下文,說明你當前的Layout所在的渲染上下文是activity name對應的那個activity,如果這個activity在manifest檔案中設定了Theme,那麼ADT的Layout Editor會根據這個Theme來渲染你當前的Layout。就是說如果你設定的MainActivity設定了一個Theme.Light(其他的也可以),那麼你在視覺化佈局管理器裡面看到的背景啊控制元件啊什麼的就應該是Theme.Light的樣子。僅用於給你看所見即所得的效果而已。

#####104. android-studio下使用volley Android working with Volley Library http://www.androidhive.info/2014/05/android-working-with-volley-library-1/ http://blog.gssxgss.me/setup-android-studio-and-volley-usage-1/

#####105.androidstudio 匯入libs後要同步一下才可以用

#####106.fragment + butterknife 的使用 othersetting-->Compiler → Annotation Processors. Check "Enable annotation processing".

#####107. com.astuetz.PagerSlidingTabStrip$PageListener.onPageScrolled(

#####108. E/InputEventReceiver﹕ Exception dispatching input event. E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback E/MessageQueue-JNI﹕ java.lang.RuntimeException: native typeface cannot be made at android.graphics.Typeface.(Typeface.java:175) at android.graphics.Typeface.createFromAsset(Typeface.java:149) at NewsFragment$1.onPageSelected(NewsFragment.java:74)

androidstudio中assert的位置和eclipse中的不同。需要注意。否則呼叫assert中資源會找不到而出現問題。

#####109.Custom Fonts in Android
http://sudharti.github.io/articles/custom-fonts-android/

Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "fonts/font_name.ttf"); Typeface tf2 = Typeface.createFromAsset(getActivity().getAssets(), "fonts/font_name2.ttf");

TextView tv = (TextView) findViewById(R.id.textview); tv.setTypeface(tf); //Set Typeface

EditText et = (EditText) findViewById(R.id.edittext); et.setTypeface(tf2);

#####110.PagerSlidingTabStrip the view throws an exception if there are no tabs available to display. It would be great if the view failed gracefully or gave a better error message. https://github.com/astuetz/PagerSlidingTabStrip/issues/69

#####111. Android開發之ScrollView中巢狀ListView的解決方案 http://blog.csdn.net/minimicall/article/details/40983331

 重寫listview的onmeasure方法   
 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
	        MeasureSpec.AT_MOST);
	super.onMeasure(widthMeasureSpec, expandSpec);
    }

這個方法有一個同樣的毛病,就是預設顯示的首項是ListView,需要手動把ScrollView滾動至最頂端。
sv = (ScrollView) findViewById(R.id.act_solution_4_sv);
sv.smoothScrollTo(0, 0);

int	AT_MOST	Measure specification mode: The child can be as large as it wants up to the specified size.
int	EXACTLY	Measure specification mode: The parent has determined an exact size for the child.
int	UNSPECIFIED	Measure specification mode: The parent has not imposed any constraint on the child.
112. java.lang.NullPointerException at android.webkit.HTML5VideoView.isPlaying(HTML5VideoView.java:122) at android.webkit.HTML5VideoViewProxy$VideoPlayer.isPlaying(HTML5VideoViewProxy.java:269)
檢查清單檔案對應activity的配置
android:configChanges="orientation|screenLayout"

#####113. Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

#####114.http://jgilfelt.github.io/android-actionbarstylegenerator/ 這個網站可以線上配置action bar的樣式,支援holo、support v7、sherlock

#####115.在其它介面異常之後返回到FragmentActivity Fragment顯示異常(重疊或不顯示)解決方 ...

前面專門開了個帖來問這個問題,問題描述詳見:http://www.eoeandroid.com/thread-496879-1-1.html
當然,問題沒有解決掉,一直也很鬱悶,今天花了點時間換了N多關鍵詞來找,最後也忘了在哪裡看到一個方法,死馬當活馬醫的寫上,居然好了。
解決方案是,在FragmentActivity裡重寫onSaveInstanceState,並且去掉super.onSaveInstanceState()即可。
原因:猜測應該是在二級介面拋了異常之後,應用在返回上級介面時會從onSaveInstanceState內讀取FragmentActivity快取的狀態,所以導致Fragment全部顯示(顯示重疊)或者顯示不出來。(只是猜測)
@Override protected void onSaveInstanceState(Bundle outState) { }

#####116.修復Android App中出現的重複選單項及Fragment重疊 https://typeblog.net/tech/2014/08/22/fix-duplicate-menu.html

 fragment replace出現重疊


一般fragment的容器都是fragment,用到的方法:

FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, fragment);
ft.addToBackStack(null);
ft.commit();
replace這個方法在fragment內部直接代入佈局的id是不會有問題的,但是在外部比如Activitiy中用就會出現fragment疊加的問題。

有很多人說給每個fragment設定背景色或圖片,但是我覺得額外費資源。

其實只要改成這樣就好了,但這之中的原理又有誰懂呢?

http://stackoverflow.com/questions/12958555/android-replace-fragment-still-displays-some-of-the-replaced-fragment

transaction.replace(((ViewGroup)(getView().getParent())).getId(), fragment);

#####117.通過activity 得到它的fM,通過tag指定到上級fragment,從而獲取到其中的介面資料 yyb if (getActivity().getSupportFragmentManager().findFragmentByTag("videos") instanceof QuickReturnInterface) { mCoordinator = (QuickReturnInterface) getActivity().getSupportFragmentManager().findFragmentByTag("news"); } else { throw new ClassCastException("Parent container must implement the QuickReturnInterface"); }

#####118.記憶體優化相關 ANDROID記憶體優化(大彙總) http://blog.csdn.net/a396901990/article/details/38707007

#####119.PagerSlidingTabStrip Changing the title of the adapter and notifyDatasetChanged does not work. #13 Call notifyDataSetChanged() on the PagerSlidingTabStrip instead. Worked for me yesterday with data loaded from a CursorLoader.

#####120.Ubuntu下的螢幕錄製軟體RecordMyDesktop

安裝:
sudo apt-get install gtk-recordmydesktop

使用:

安裝好之後該軟體會在影音軟體裡面,開啟就可以。然後可以選擇需要錄製的視窗,如果不選擇的話就預設是使用者在螢幕上的所有操作。點選“錄製”就開始了,此時該軟體隱藏在   上方的工作列(紅色圓圈),可以隨時停止錄製。得到的視訊儲存在主目錄下,其格式為Ogg。如果需要把它轉換為avi格式,可以安裝軟體mencoder,命令如下:

sudo apt-get install mencoder

然後用下面的命令轉換:
mencoder -ovc lavc -oac copy -lavcoptsvcodec=mpeg4 -o outfile.avi infile.ogv




 ubuntu動態截圖,製作GIF動畫

Ubuntu 下, 如何錄製 gif 格式的螢幕截圖

1. 安裝 gtk-recordmydesktop 來錄製螢幕, 安裝 mplayer 將視訊分解成單幀圖片, 安裝 imagemagick 將單幀圖片壓縮成一張 gif:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop
2. 命令列下執行, 錄製並儲存檔案為 out.ogv:

gtk-recordmydesktop
3. 執行如下命令將 out.ogv 分解成單幀圖片:

mplayer -ao null out.ogv -vo jpeg:outdir=.
4. 執行如下命令將單幀圖片壓縮成 gif 圖片:

convert *.jpg out.gif
5. 執行如下命令將 gif 圖片進行壓縮:

convert out.gif -fuzz 10% -layers Optimize optimized.gif
Live Like You're Dying And Never Stop Tying

#####121.一個ListView中會建立很多個convertview,並不是所有的都複用的,比如同一屏顯示的肯定都是不一樣的convertview。

#####122.效能優化 框架的選擇。volley【儘量google支援的或者原生的】 buttferty greendao 【沒有采用反射技術的,比如greendao使用的是code generation。而不是註解】

為什麼greenDao使用的是code generation,而不是註解?

對於greenDao,程式碼生成是非常合理的。在Android平臺上,基於註解的解決方式是有缺陷的:它們不得不依賴於後設資料的解析和反射。特別是反射,會顯著降低ORM工具的效能。另一方面,greenDao會為Android生成優化過的程式碼。這些生成的程式碼完全避免了反射。這也是greenDao如此快的主要原因。另一個優勢是大小。

greenDao的核心lib是非常小的(在100K以下,包括單元測試)。這是因為對於一些ORM的內部邏輯都在generator中,而不是在核心庫中。

greenDao包含了:DaoCore,DaoGenerator和DaoTest。DaoCore是需要你加入到android專案中的,在Apache License 2版本以下是許可的。

DaoGenerator是java程式,負責實體的生成,DAO和其它的檔案。DaoTest是單元測試用例額,確保了greenDao本身和其穩定性。

DaoGenerator 和DaoTest 在GPL V3以下是可用的。這些許可條款可以滿足大部分的開發者使用。

#####123.Lazy Loading lazy不是翻譯成懶,差不多算延遲、推遲的意思。 是說不在初始化時loading,而是推遲到必須loading時才進行loading。

#####124.android-stuido File > Invalidate 問題:could not save application settings:java.util.zip.zipexception:incorrect header check

https://code.google.com/p/android/issues/detail?id=56190

解決 It looks like there's a corrupted cache. To work around this, invoke File > Invalidate Caches. If you can't start Android Studio at all, try going to the cache directory (its location depends on your platform) and delete it, then start Studio.

#####125.Android.gitignore .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build # Built application files *.apk *.ap_

# Files for the Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle/
build/
/*/build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

#####126.NDK With Android Studio http://blog.csdn.net/u011570979/article/details/43966567

#####127.chrome+紅杏 honx.in/i/VLMhwoIaA1yvXz7n

#####127.ANDROID仿IOS時間_ANDROID仿IOS彈出提示框 http://dwtedx.com/itshare_297.html

#####128. Android TextView drawableLeft 在程式碼中實現

方法1

Drawable drawable= getResources().getDrawable(R.drawable.drawable); /// 這一步必須要做,否則不會顯示. drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); myTextview.setCompoundDrawables(drawable,null,null,null);

方法2

public void setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top, Drawable right, Drawable bottom)

#####129. /* 去鋸齒 */ paint.setAntiAlias(true);

#####130.android 畫圖之setXfermode
http://blog.csdn.net/wm111/article/details/7299294 setXfermode

設定兩張圖片相交時的模式 

我們知道 在正常的情況下,在已有的影像上繪圖將會在其上面新增一層新的形狀。 如果新的Paint是完全不透明的,那麼它將完全遮擋住下面的Paint; 

而setXfermode就可以來解決這個問題 


一般來說 用法是這樣的 
[java] view plaincopy

    Canvas canvas = new Canvas(bitmap1);  
      
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
      
    canvas.drawBitmap(mask, 0f, 0f, paint);    

#####131. ubuntu android cordova Setting up PhoneGap on Ubuntu for Android app development

#####132.webview的頁面都finish了居然還能聽到視訊播放的聲音,查了下發現webview的 onResume方法可以繼續播放, onPause可以暫停播放, 但是這兩個方法都是在Added in API level 11新增的,所以需要用反射來完成。 停止播放:在頁面的onPause方法中使用: webView.getClass().getMethod("onPause").invoke(webView,(Object[])null); 繼續播放:在頁面的onResume方法中使用: webView.getClass().getMethod("onResume").invoke(webView,(Object[])null); 這樣就可以控制視訊的暫停和繼續播放了。

在webView的Activity配置裡面加上:
android:hardwareAccelerated="true"

#####133.Create new project on Android, Error: Studio Unknown host 'services.gradle.org' 解決方法 please try following steps: Go to..

File --> settings --> HTTP Proxy [Under IDE Settings] --> Auto-detect proxy settings

you can also use the test connection button and check with google.com if it works or not
[關於紅杏的公益代理, Android Studio以及freso的編譯](http://www.liaohuqiu.net/cn/posts/about-red-apricot-and-compiling-fresco/)

#####134.ListView.setOnItemClickListener 點選無效

如果ListView中的單個Item的view中存在checkbox,button等view,會導致ListView.setOnItemClickListener無效,

事件會被子View捕獲到,ListView無法捕獲處理該事件.

解決方法:

在checkbox、button對應的view處加android:focusable="false"
   android:clickable="false"android:focusableInTouchMode="false"

其中focusable是關鍵

 

從OnClickListener呼叫getSelectedItemPosition(),Click 和selection 是不相關的,Selection是通過D-pad or trackball 來操作的,Click通常是點選操作的。

 

arg2引數才是點選事件位置的引數

#####135.listview addheader 如果有多個header,可以把多個header封裝。把封裝後的view作為header

#####136.emojicon emojicon, https://github.com/rockerhieu/emojicon emojicon, https://github.com/ankushsachdeva/emojicon

#####137.新聞評論頁,如何實現蓋樓,listview的高度自適應? 控制元件的高度 設為wrap_content

#####138.android改變CheckBox和後面文字的間距 http://www.haodaima.net/art/1891872 解決方法: 1.設定android:paddingLeft="25dip",就可以了。 2.設定checkbox的背景圖片。系統預設的給checkbox加的有一個透明的背景。

#####139.volley請求超時 如何處理 http://stackoverflow.com/questions/17094718/android-volley-timeout

myRequest.setRetryPolicy(new DefaultRetryPolicy(
	        MY_SOCKET_TIMEOUT_MS, 
	        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
	        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));  

#####140.Listview getItemViewType的使用 對於不同xml,使用多個viewhold

#####141.Android “Only the original thread that created a view hierarchy can touch its views.”http://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi thread = new Thread(){ @Override public void run() { try { synchronized (this) { wait(5000);

	            runOnUiThread(new Runnable() {
	                @Override
	                public void run() {
	                    dbloadingInfo.setVisibility(View.VISIBLE);
	                    bar.setVisibility(View.INVISIBLE);
	                    loadingText.setVisibility(View.INVISIBLE);
	                }
	            });

	        }
	    } catch (InterruptedException e) {
	        e.printStackTrace();
	    }
	    Intent mainActivity = new Intent(getApplicationContext(),MainActivity.class);
	    startActivity(mainActivity);
	};
    };  
    thread.start();

#####142.Java SDK提供了對上述三種壓縮技術的支援:Inflater類和Deflater類直接用zlib庫對資料壓縮/ 解壓縮,GZIPInputStream類和GZIPOutputStream類提供了對gzip格式的支援,ZipFile、Zi pInputStream、ZipOutputStream則用於處理zip格式的檔案。

所以,你應當根據你的具體需求,選擇不同的壓縮技術:如果只需要壓縮/解壓縮資料,你
可以直接用zlib實現,如果需要生成gzip格式的檔案或解壓其他工具的壓縮結果,你就必須
用gzip或zip等相關的類來處理了。

#####143.利用volley進行http設定請求頭、超時及請求引數設定(post)

這裡以post請求說明,get請求相似設定請求頭及超時。

1.自定義request,繼承com.android.volley.Request

2.構造方法實現(basecallback,為自定義的監聽,實現Response.Listener,ErrorListener介面)--post請求

 public BaseRequest(String url,String params, BaseCallback<T> callback)
    {
	super(Method.POST, url, callback);
	this.callback = callback;
	this.params = params;
	Log.e(TAG, "request:" + params);
	setShouldCache(false);
    }
3.請求頭設定:重寫getHeaders方法

 @Override
    public Map<String, String> getHeaders() throws AuthFailureError
    {
	Map<String, String> headers = new HashMap<String, String>();
	headers.put("Charset", "UTF-8");
	headers.put("Content-Type", "application/x-javascript");
	headers.put("Accept-Encoding", "gzip,deflate");
	return headers;
    }
設定字符集為UTF-8,並採用gzip壓縮傳輸

4.超時設定:重寫getRetryPolicy方法

 @Override
    public RetryPolicy getRetryPolicy()
    {
	RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
	return retryPolicy;
    }
5.請求引數組裝:重寫getBody方法

 @Override
    public byte[] getBody() throws AuthFailureError
    {
	return params == null ? super.getBody() : params.getBytes();
    }

#####144. android handler的警告Handler Class Should be Static or Leaks Occur

在使用Handler更新UI的時候,我是這樣寫的:


public class SampleActivity extends Activity {
	                                                      
  private final Handler mLeakyHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      // TODO
    }
  }
}
看起來很正常的,但是 Android Lint 卻給出了警告:

This Handler class should be static or leaks might occur

意思是說:這個Handler 必須是static的,否則就會引發記憶體洩露。

其實,對於這個問題,Android Framework 的工程師 Romain Guy 早已經在Google論壇上做出過解釋,並且給出了他的建議寫法:



I wrote that debugging code because of a couple of memory leaks I 
found in the Android codebase. Like you said, a Message has a 
reference to the Handler which, when it's inner and non-static, has a 
reference to the outer this (an Activity for instance.) If the Message 
lives in the queue for a long time, which happens fairly easily when 
posting a delayed message for instance, you keep a reference to the 
Activity and "leak" all the views and resources. It gets even worse 
when you obtain a Message and don't post it right away but keep it 
somewhere (for instance in a static structure) for later use. 



他的建議寫法是:


class OuterClass {
	                          
  class InnerClass {
    private final WeakReference<OuterClass> mTarget;
	                          
    InnerClass(OuterClass target) {
	   mTarget = new WeakReference<OuterClass>(target);
    }
	                          
    void doSomething() {
	   OuterClass target = mTarget.get();
	   if (target != null) {
	        target.do();    
	   }
     }
}
下面,我們進一步解釋一下:

1.Android App啟動的時候,Android Framework 為主執行緒建立一個Looper物件,這個Looper物件將貫穿這個App的整個生命週期,它實現了一個訊息佇列(Message  Queue),並且開啟一個迴圈來處理Message物件。而Framework的主要事件都包含著內部Message物件,當這些事件被觸發的時候,Message物件會被加到訊息佇列中執行。
2.當一個Handler被例項化時(如上面那樣),它將和主執行緒Looper物件的訊息佇列相關聯,被推到訊息佇列中的Message物件將持有一個Handler的引用以便於當Looper處理到這個Message的時候,Framework執行Handler的handleMessage(Message)方法。
3.在 Java 語言中,非靜態匿名內部類將持有一個對外部類的隱式引用,而靜態內部類則不會。

到底記憶體洩露是在哪裡發生的呢?以下面程式碼為例:


public class SampleActivity extends Activity {
	          
  private final Handler mLeakyHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      // ...
    }
  }
	          
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
	          
    // Post a message and delay its execution for 10 minutes.
    mLeakyHandler.postDelayed(new Runnable() {
      @Override
      public void run() { }
    }, 60 * 10 * 1000);
	          
    // Go back to the previous Activity.
    finish();
  }
}
當Activity被finish()掉,Message 將存在於訊息佇列中長達10分鐘的時間才會被執行到。這個Message持有一個對Handler的引用,Handler也會持有一個對於外部類(SampleActivity)的隱式引用,這些引用在Message被執行前將一直保持,這樣會保證Activity的上下文不被垃圾回收機制回收,同時也會洩露應用程式的資源(views and resources)。

為解決這個問題,下面這段程式碼中的Handler則是一個靜態匿名內部類。靜態匿名內部類不會持有一個對外部類的隱式引用,因此Activity將不會被洩露。如果你需要在Handler中呼叫外部Activity的方法,就讓Handler持有一個對Activity的WeakReference,這樣就不會洩露Activity的上下文了,如下所示:


public class SampleActivity extends Activity {
	 
  /**
   * Instances of static inner classes do not hold an implicit
   * reference to their outer class.
   */
  private static class MyHandler extends Handler {
    private final WeakReference<SampleActivity> mActivity;
	 
    public MyHandler(SampleActivity activity) {
      mActivity = new WeakReference<SampleActivity>(activity);
    }
	 
    @Override
    public void handleMessage(Message msg) {
      SampleActivity activity = mActivity.get();
      if (activity != null) {
	// ...
      }
    }
  }
	 
  private final MyHandler mHandler = new MyHandler(this);
	 
  /**
   * Instances of anonymous classes do not hold an implicit
   * reference to their outer class when they are "static".
   */
  private static final Runnable sRunnable = new Runnable() {
      @Override
      public void run() { }
  };
	 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
	 
    // Post a message and delay its execution for 10 minutes.
    mHandler.postDelayed(sRunnable, 60 * 10 * 1000);
	     
    // Go back to the previous Activity.
    finish();
  }
}
總結:
在實際開發中,如果內部類的生命週期和Activity的生命週期不一致(比如上面那種,Activity finish()之後要等10分鐘,內部類的例項才會執行),則在Activity中要避免使用非靜態的內部類,這種情況,就使用一個靜態內部類,同時持有一個對Activity的WeakReference。
146.FragmentPagerAdapter (getSupportFragmentManager() ) You must call removeView() on the child's parent
How to solve for viewpager : The specified child already has a parent. You must call removeView() on the child's parent first

http://stackoverflow.com/questions/13559353/how-to-solve-for-viewpager-the-specified-child-already-has-a-parent-you-must 解決方法 I had the same problem when I used

View res = inflater.inflate(R.layout.fragment_guide_search, container);
inside Fragment.onCreateView(...

You must call

View res = inflater.inflate(R.layout.fragment_guide_search, container, false);
or

View res = inflater.inflate(R.layout.fragment_guide_search, null);

參考:

[1]https://groups.google.com/forum/?fromgroups=#!msg/android-developers/1aPZXZG6kWk/lIYDavGYn5UJ[2]http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html[3]http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler

145. 使用程式碼為textview設定drawableLeft
Drawable drawable= getResources().getDrawable(R.drawable.drawable);  
/// 這一步必須要做,否則不會顯示.  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
myTextview.setCompoundDrawables(drawable,null,null,null);  
146.Android如何在java程式碼中設定margin
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);  
lp.setMargins(10, 20, 30, 40);  
imageView.setLayoutParams(lp);
147.出錯了表現:Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
解決:谷歌出了 新的Multidex支援庫  androidstudio    https://developer.android.com/tools/building/multidex.html
	android {
		    compileSdkVersion 21
		    buildToolsVersion "21.1.0"

		    defaultConfig {
			...
			minSdkVersion 14
			targetSdkVersion 21
			...

			// Enabling multidex support.
			multiDexEnabled true
		       }
		      ...
		}

		dependencies {
		  compile 'com.android.support:multidex:1.0.0'
		}
148.How to get Nautilus-scripts working on Ubuntu 14.04?
nautilus-actions-config-tool

http://askubuntu.com/questions/281062/how-to-get-nautilus-scripts-working-on-ubuntu-13-04  設定好之後 nautilus -q。重啟下nautilus服務生效

http://ubuntuhandbook.org/index.php/2014/04/ubuntu-14-04-add-open-as-rootadministrator-to-context-menu/
149. imageloader顯示圖片所使用的uri:
String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)
注意:使用drawable://除非你真的需要他。時刻要注意使用本地圖片載入方法:setImageResource帶代替ImageLoader。
五,有用的資訊
1,ImageLoader.getInstance().init(config); // 在應用開啟的時候初始化。
2,<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>sd卡快取是需要寫入許可權
3,ImageLoader根據ImageView的width,height確定圖片的寬高。
4,如果經常出現OOM
   ①減少配置之中執行緒池的大小,(.threadPoolSize).推薦1-5;
   ②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
   ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者try.imageScaleType(ImageScaleType.EXACTLY);
   ④避免使用RoundedBitmapDisplayer.他會建立新的ARGB_8888格式的Bitmap物件;
   ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
5,記憶體快取,sd卡快取,顯示圖片,可以使用已經初始化過的實現;
6,為了避免使用list,grid,scroll,你可以使用
boolean pauseOnScroll = false; // or true
boolean pauseOnFling = true; // or false
PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
listView.setOnScrollListener(listener);
150.View's getWidth() and getHeight() returning 0
You should use: image1.getLayoutParams().width;    http://stackoverflow.com/questions/18268915/views-getwidth-and-getheight-returning-0
151.GridView的行數問題
在gridview裡邊設定屬性 android:numColumns="3";意思是三列 然後在BaseAdapter的 getCount()方法 裡邊返回9。這樣就可以平分為3行3列了
152.ArrayList和陣列間的相互轉換 http://wanglihu.iteye.com/blog/243238
ArrayList提供public <T> T[] toArray(T[] a)

public static <T> List<T> asList(T... a)
153.Unexpected response code 500
網頁已經被關閉
還有就是,一般由於內部伺服器錯誤造成的。
  伺服器關閉或者伺服器升級而造成的資源無法訪問
  由於伺服器太忙而造成的,此時無法處理請求。通訊量超出 Web 站 點的能力
154. banner廣告及view pager 的小圓點指示器 CirclePageIndicator http://9437752.blog.51cto.com/9427752/1580984
155.使用ViewPager+GridView實現橫向滑動的效果 http://blog.csdn.net/developer_jiangqq/article/details/9364501
156.CircleImageView https://github.com/hdodenhof/CircleImageView
157.ViewPager FragmentPagerAdapter Nullpointer fragmentpageradapter和pageradapter的區別。使用的場景。
158.unable to have ViewPager WRAP_CONTENT http://stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content
Overriding onMeasure of your ViewPager as follows will make it get the height of the biggest child it currently has.

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 
    int height = 0;
    for(int i = 0; i < getChildCount(); i++) {
	View child = getChildAt(i);
	child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
	int h = child.getMeasuredHeight();
	if(h > height) height = h;
    } 
 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} 
159.在自定義檢視佈局檔案中,僅支援FrameLayout、LinearLayout、RelativeLayout三種佈局控制元件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控制元件,不支援這些類的子類或Android提供的其他控制元件。否則會引起ClassNotFoundException異常
160.Android模擬器Genymotion載入ARM架構so檔案
http://www.eoeandroid.com/thread-552875-1-1.html
https://www.genymotion.com/#!/support?chapter=collapse-logs#faq
161.Viewpager wrap_hight導致不顯示。 重寫ViewPager
 /**
     * for bug   : unable to have ViewPager WRAP_CONTENT
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	int hight = 0;
	for (int i = 0; i < getChildCount(); i++) {
	    View child = getChildAt(i);
	    child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
	    int h = child.getMeasuredHeight();
	    if (h > hight) hight = h;

	}
	heightMeasureSpec = MeasureSpec.makeMeasureSpec(hight, MeasureSpec.EXACTLY);
	super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } 
162.選擇項有RadioGroup和另外一個button組成 點選button的時候,清除radiogroup中選中的radiobutton。呼叫radiogroup的clearCheck方法即可
163.gridview columnnum。上傳照片
164. 9.png Error:Must have one-pixel frame that is either transparent or white. -xxx/app/src/main/res/drawable-xhdpi/icon_addpic_focused.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited

解決方法如下 this is the problem with latest adt that is 20.0.3. you can instead rename the *.9.png to *.png and start working. i think this is the bug with the adt only, since for 18.0.0 version adt it doesnt prompts for this type of error and works fine

165. IntentRecieverLeakedException, Are you missing a call to unregisterReceiver() ? in android
註冊廣播接收者有兩種方式,一種在清單檔案中註冊。這個是長期有效的。另外一種是。在activity中註冊,這種註冊的生命週期在actity的生命週期內,還有第二種註冊不要registerReceiver必須要和unregisterReceiver配套使用,否則會出現上述問題。
http://stackoverflow.com/questions/9078390/intentrecieverleakedexception-are-you-missing-a-call-to-unregisterreceiver
  1. SVN Ignore files in Android Studio http://stackoverflow.com/questions/23536563/svn-ignore-files-in-android-studio
There was nothing in the repository, until I did Share Directory on the project. It then created the folder for the project in the repository. I entered the following in Settings|Version Control|Subversion:

File:.idea/workspace.xml
File: .gradle
Directory: build/
Mask: *.iws
Directory: .idea/libraries/
Directory: app/build/
File: local.properties

  下面的更徹底
*.iml
*.iws
*.ipr
.idea/
.gradle/
local.properties

*/build/

*~
*.swp
167. packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
168.CLEAN

Android Studio fails to debug with error org.gradle.process.internal.ExecException Error:Execution failed for task ':app:dexDebug'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_11\bin\java.exe'' finished with non-zero exit value 2

169.Eclipse混淆檔案匯入Android Studio Gradle編譯報input jar file is specified twicehttp://blog.csdn.net/X_i_a_o_H_a_i/article/details/41979983 原因是build.gradle檔案配置了

dependencies { compile fileTree(include: '*.jar', dir: 'libs')

}

裡面已經新增過jar包,混淆檔案proguard-rules.pro裡面又加了句-libraryjars libs/***.jar,將-libraryjars libs/***.jar 前面用#號註釋或者直接刪掉即可。

170.key.java android-stuido 中錯誤提示:“非法字元: \65279” http://www.cnblogs.com/littlehb/archive/2013/04/20/3032721.html

對設定為“UTF-8”編碼的檔案在修改後儲存時自動加入了UTF-8檔案簽名,即BOM(將檔案以十六進位制形式檢視,可見檔案首部為“EF BB BF”).

解決方法: 使用Notepad++去除BOM 【在IntelliJ IDEA 12使用,可成功】

具體方法:先設定以UTF-8無ROM方式編碼,然後開啟檔案,另存此檔案,覆蓋掉原檔案。

設定方法:格式->以UTF-8無ROM方式編碼。
171.LocalBroadcastManager 解決fragment中通訊的問題
最近在開發平板專案,完全是fragmentactivity+fragment的結構。看起來似乎簡單,但是和以前不同的是,業務邏輯非常複雜,多處的非常規跳轉,
fragment之間的資料交換,一處更新多處更新等操作,有時玩起來都心塞。專案背景介紹完畢。
現在有這樣一個場景,專案需求是,後臺可配置功能,也就是說app端所有的功能都是後臺配置上去的動態生成,對應的功能介面如下圖。
能夠完成在應用內的廣播傳送,而且比全域性廣播更具優勢:
1).廣播只會在你的應用內傳送,所以無需擔心資料洩露,更加安全。
2).其他應用無法發廣播給你的應用,所以也不用擔心你的應用有別人可以利用的安全漏洞
3).相比較全域性廣播,它不需要傳送給整個系統,所以更加高效。

2. 使用方式
廣播註冊:
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION);
myBroadcastReciver = new MyBroadcastReciver();
localBroadcastManager.registerReceiver(myBroadcastReciver, filter);
複製程式碼
廣播傳送:
Intent intent = new Inten();
intent.setAction(SaleLeftFragment.ACTION);
intent.putExtra(TAG, data);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
複製程式碼
3.使用注意
在使用的時候,請關注以下幾點:
1).LocalBroadcastManager註冊廣播只能通過程式碼註冊的方式。
2).LocalBroadcastManager註冊廣播後,一定要記得取消監聽。
3).重點的重點,使用LocalBroadcastManager註冊的廣播,您在傳送廣播的時候務必使用

Fragment間的廣播訊息接收

廣播註冊,可以寫在Activity(onCreate),也可以寫在Fragment(onActivityCreated)裡。

複製程式碼
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.CART_BROADCAST");//建議把它寫一個公共的變數,這裡方便閱讀就不寫了。
BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
	    @Override
	    public void onReceive(Context context, Intent intent){
	        System.out.println("OK");
	    }
 };
 broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter);
複製程式碼
 

 


傳送廣播

Intent intent = new Intent("android.intent.action.CART_BROADCAST");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
172.[How can I] Change the password, so I can share it with others and let them sign

Using keytool:

keytool -storepasswd -keystore /path/to/keystore
Enter keystore password:  changeit
New keystore password:  new-password
Re-enter new keystore password:  new-password
173.How to create a release signed apk file using Gradle?

http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle

174.No activity found to handle intent action.dial

Uri.parse("tel:" + a1) Android 呼叫系統Email --多附件 Intent.ACTION_SENDTO 無附件的傳送 Intent.ACTION_SEND 帶附件的傳送 Intent.ACTION_SEND_MULTIPLE 帶有多附件的傳送 Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:455245521@qq.com"));
data.putExtra(Intent.EXTRA_SUBJECT, "這是標題");
data.putExtra(Intent.EXTRA_TEXT, "這是內容");
startActivity(data);

175.HTML 中有用的字元實體

註釋:實體名稱對大小寫敏感! 顯示結果 描述 實體名稱 實體編號 空格     < 小於號 < <

大於號 > > & 和號 & & " 引號 " " ' 撇號 ' (IE不支援) ' ¢ 分 ¢ ¢ £ 鎊 £ £ ¥ 日圓 ¥ ¥ € 歐元 € € § 小節 § § © 版權 © © ® 註冊商標 ® ® ™ 商標 ™ ™ × 乘號 × × ÷ 除號 ÷ ÷

176.Generating signed release APK using Gradle https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle
 How to create a release signed apk file using Gradle?   http://stackoverflow.com/questions/18328730/how-to-create-a-release-signed-apk-file-using-gradle
android {
    compileSdkVersion 17

    signingConfigs {
	releaseSigning {
	    storeFile file(System.getenv("ANDROID_KEYSTORE"))
	    storePassword System.console().readLine("\nStore password: ")
	    keyAlias System.getenv("ANDROID_KEYALIAS")
	    keyPassword System.console().readLine("Key password: ")
	}
    }

    buildTypes {
	release {
	    signingConfig signingConfigs.releaseSigning
	}
    }
}
Now, you can generate the signed and zipaligned release APK using the Gradle task:

./gradlew assembleRelease
177.Android Studio: How to use Monitor(DDMS) tool to debug application step by step?
Go to "Tools > Android > Android Device Monitor" in v0.8.6. That will pull up the DDMS eclipse perspective.

 dump viewhierarchy for ui automator 可以檢視應用的佈局,當對某個app佈局感興趣時,可以採用此種方式檢視此app的佈局,相當於佈局反編譯功能。
178. 如何通過java程式碼設定textview字型加粗。
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗  
179.qickreturn swiperefreshlayout
180. viewpager中徹底性動態新增、刪除Fragment http://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android
viewpager在載入當前頁的時候已經將pager頁左右頁的內容載入進記憶體裡了,這樣才保證了viewpager左右滑動的時候的流暢性;
為了解決徹底刪除fragment,我們要做的是:
1.將FragmentPagerAdapter 替換成FragmentStatePagerAdapter,因為前者只要載入過,fragment中的檢視就一直在記憶體中,在這個過程中無論你怎麼重新整理,清除都是無用的,直至程式退出; 後者 可以滿足我們的需求。
2.我們可以重寫Adapter的方法--getItemPosition(),讓其返回PagerAdapter.POSITION_NONE即可;
181. Uri.encode
182.omniplan mac
183.androidstudio svn delete
184.GreenDao query OR within AND
http://stackoverflow.com/questions/22785327/greendao-query-or-within-and

QueryBuilder.and() and QueryBuilder.or() are used to combine WhereConditions. The resulting WhereConditions have to be used inside QueryBuilder.where() (which will combine the conditions using AND) or QueryBuilder.whereOr().
185.greendao 刪除某個物件

http://www.cnblogs.com/spring87/p/4364769.html 1.public void deleteCityInfo(int cityId) 2.{ 3.QueryBuilder qb = cityInfoDao.queryBuilder(); 4.DeleteQuery bd = qb.where(Properties.CityId.eq(cityId)).buildDelete(); 5.bd.executeDeleteWithoutDetachingEntities(); 6.}

187. androidstudio ctrl+shift+t 模糊搜尋類
                ctrl+o 本檔案的函式
	    ctrl+g  全域性搜尋類 變數 函式
               alter+insert 快速插入getset等
	Ctrl+Shift+F7 可以高亮當前元素在當前檔案中的使用
	Android Studio 如何提示函式用法?   先選中,然後按F2
188.Fragment的通訊有關問題, 新建Fragment為何不要在構造方法中傳遞引數

http://233.io/article/1057296.html

189.

在理解反射的時候,不得不說一下記憶體。 先理解一下JVM的三個區:堆區,棧區,和方法去(靜態區)。 堆區:存放所有的物件,每個物件都有一個與其對應的class資訊。在JVM中只有一個堆區,堆區被所有的執行緒共享。 棧區:存放所有基礎資料型別的物件和所有自定義物件的引用,每個執行緒包含一個棧區。每個棧區中的資料都是私有的,其他棧不能訪問。 棧分為三部分: 基本型別變數區、執行環境上下文、操作指令區(存放操作指令)。 方法區:即靜態區,被所有的執行緒共享。方法區包含所有的class和static變數。它們都是唯一的。

在啟動一個java虛擬機器時,虛擬機器要載入你程式裡所用到的類 ,這個程式會首先跑到jdk中(在jdk的jre/lib/ext資料夾裡找那些jar檔案),如果沒有找到,會去classpath裡設定的路徑去找。
在找到要執行的類時:
1.首先將找到的類的資訊載入到執行時資料區的方法區。這個過程叫做類的載入。所以一下static型別的在類的載入過程中就已經放到了方法區。所以不用例項化就能用一個static型別的方法。
2.載入完成後,在new一個類時,首先就是去方法區看看有沒有這個類的資訊。如果沒有這個類的資訊,先裝載這個類。then,載入完成後,會在堆區為new的這個類分配記憶體,有了記憶體就有了例項,而這個例項指向的是方法區的該類資訊。其實就是存放了在方法區的地址。而反射就是利用了這一點。
190. Genymotion Crash after a few minutes

E/eglCodecCommon(2163): writeFully: failed: Broken pipe

http://stackoverflow.com/questions/23855115/genymotion-crash-after-a-few-minutes

It's not really caused by your application, so don't worry.

It often happens when you computer goes in sleep mode and when you come back Genymotion will throw this exception (it happens to me very often).

In your specific case sounds like the device goes in sleep mode so a way to fix it is simply to enable "Always stay awake" in developers options.
192. A WebView method was called on thread 'Timer-1'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

java.lang.IllegalStateException: Timer was canceled at java.util.Timer.scheduleImpl(Timer.java:561) at java.util.Timer.schedule(Timer.java:481) at com.jetsun.hbfc.activity.base.CommonWebViewActivity$3.onPageStarted(CommonWebViewActivity.java:178)

Webview reload page get force close

Change your TimerTask to the following:

new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { public void run() { wvNovaMenzaCammera.reload(); } });
} }

193.http://blog.csdn.net/xieyuooo/article/details/8607220

Timer與TimerTask的真正原理&使用介紹

194.http://233.io/article/1057296.html Fragment的通訊有關問題, 新建Fragment為何不要在構造方法中傳遞引數
195.Add a new file in Intellij doesn't add to subversion
http://stackoverflow.com/questions/2817452/add-a-new-file-in-intellij-doesnt-add-to-subversion
	Go to File -> Settings -> Version control -> Confirmation -> When files are created You're probably looking for "Add silently".
196.使用Android Studio的lint清除無用的資原始檔 http://waychel.com/shi-yong-android-studiode-lintqing-chu-wu-yong-de-zi-yuan-wen-jian/
197. Android應用程式release打簽名包時,出現錯誤:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....

eclipse http://blog.csdn.net/u012264122/article/details/39371343

androidstudio http://stackoverflow.com/questions/20699147/gradle-build-fails-on-lint-task

// This is important, it will run lint checks but won't abort build
  lintOptions {
      abortOnError false
  }


if abortOnError false will not resolve your problem, you can try this.

lintOptions {
    checkReleaseBuilds false
}
198.

全面提高Ubuntu Linux作業系統執行速度

1.六招讓你的Ubuntu馬上提速  http://article.yeeyan.org/view/205625/294577


       Where did the startup-applications-preferences program go?  ubuntu satartup applications preference
	 http://askubuntu.com/questions/159887/where-did-the-startup-applications-preferences-program-go
	The if you can't find the program anywhere, try running gnome-session-properties from the command line (or alt+f2).

	If it's not installed, I'm sure you can install the package gnome-session-properties.

2. 將localhost化名為主機名

	據說這個方法可以改善使用Ubuntu一段後,在GNOME中啟動應用程式變慢的問題

	# vi /etc/hosts

	127.0.0.1 localhost

	127.0.1.1 Ubuntu

	===>

	127.0.0.1 localhost Ubuntu

	127.0.1.1 Ubuntu

	注:在第一行末尾加上主機名,也就是第二行的那個名字。

3.安裝preload

	可以把一些常用到的lib庫和應用程式預載入到記憶體,以提高程式的啟動速度

	# apt-get install preload
199.volley由於網路訪問比較慢,導致訪問兩次的現象 http://stackoverflow.com/questions/22428343/android-volley-double-post-when-have-slow-request?
	http://stackoverflow.com/questions/3352424/httpurlconnection-openconnection-fails-second-time
200.當你想讓一個高度值不足scrollview的子控制元件fillparent的時候,單獨的定義 android:layout_height="fill_parent"是不起作用的,必須加上fillviewport屬性,當子控制元件的高度值大於 scrollview的高度時,這個標籤就沒有任何意義了。
201.activity FLAG_ACTIVITY_REORDER_TO_FRONT 無法startActivity http://blog.csdn.net/mingli198611/article/details/8678513
202. Genymotion模擬器執行專案 jPush報錯jpush Couldn't load jpush: findLibrary returned null

at cn.jpush.android.api.JPushInterface.init(Unknown Source)

203.androidstudio檢查更新。Android Studio支援自動檢查更新。之前尚未釋出正式版時,一週有時會有幾次更新。你可以設定檢查的型別,用以控制更新型別。
Settings --> Updates 。勾選 Check for updates in channel ,即開通了自動檢查更新。你可以禁用自動檢查更新。右側的列表,是更新通道。
Stable Channel : 正式版本通道,只會獲取最新的正式版本。
Beta Channel : 測試版本通道,只會獲取最新的測試版本。
Dev Channel : 開發釋出通道,只會獲取最新的開發版本。
Canary Channel : 預覽釋出通道,只會獲取最新的預覽版本。rc  release candidates

以上4個通道中, Stable Channel 最穩定,問題相對較少, Canary Channel 能獲得最新版本,問題相對較多。

204.AndroidのActivity之Listview元件快速拖動 android:fastScrollEnabled="true" android:focusable="true"

205. Lint: How to ignore “ is not translated in ” errors?

http://stackoverflow.com/questions/11443996/lint-how-to-ignore-key-is-not-translated-in-language-errors To ignore this in a gradle build add this to the android section of your build file:

lintOptions { disable 'MissingTranslation' }

Authentication Error errorcode: 201 uid: -1 appid -1 msg: APP被使用者自己禁用 205. ubuntu apktool 2.0 Exception in thread "main" brut.androlib.err.UndefinedResObject

keytool -list -keystore SportsApp.keystore

206.

Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56) at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491) at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74) at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66) at brut.androlib.Androlib.getResTable(Androlib.java:50) at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114) at brut.apktool.Main.cmdDecode(Main.java:146) at brut.apktool.Main.main(Main.java:77) Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000 at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48) at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44) at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102) at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83) at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49) ... 8 more

It seems there's some problem in building the resources while recompiling the apk. what you can do is, when you decompile your apk use this command

apktool d -f -r apkfilename.apk here -f is to replace previous decompiled apk's code and -r is to ignore the decompiling of resources.

this would prevent the resources from being decompiled and will simply copy the same resources when you recompile the apk.

207.尊敬的三星使用者您好:

三星I9228手機截止目前支援升級的最新版本是安卓4.1 1.Fota方式升級:通過手機設定-(一般)-關於裝置-系統更新(或軟體更新)-更新。 此方式升級韌體注意事項: 1).手機需設定為當前時間 2).建議升級時手機有足夠的電量最好多於50%。 3).手機需要有足夠的儲存空間(至少1GB USB儲存器)。 4).網路環境穩定(系統/韌體更新版本較大,可能會消耗較多流量,建議升級時可以使用WLAN上網方式操作)。 2.Kies方式升級:在電腦中安裝Kies軟體,安裝後手機和電腦通過USB連線,開啟Kies軟體,如有手機系統/韌體新版本時Kies軟體會有韌體升級提示,點選升級即可。 1).Kies下載連結如下:http://www.samsung.com/cn/support/usefulsoftware/KIES/JSP 注意:下載安裝時手機與電腦不要連線。 若您使用的手機或平板電腦採用的是安卓4.3及以上作業系統,請下載安裝Kies3版本。 2).Kies方式升級韌體注意事項:http://skp.samsungcsportal.com/integrated/popup/FaqDetailPopup3.jsp?cdsite=cn&seq=438936 3.送到三星服務中心升級:攜帶購機發票、包修卡和機器到三星服務中心,由專業的售後工程師幫助您升級。 具體服務中心查詢請訪問:http://support-cn.samsung.com/support/ServiceLocations.asp 歡迎您向我們反饋您的建議和評價: www.diaochaquan.cn/s/3Z0LE

208

android sharesdk微信分享 建立應用時所需的應用簽名怎麼得到

根據這個頁面提供的一個工具 簽名生成工具 https://open.weixin.qq.com/cgi-bin/readtemplate?t=resource/app_download_android_tmpl&lang=zh_CN Android資源下載 開發工具包 開發第三方應用所需要的庫以及檔案。點選下載 範例程式碼 包含了一個完整的範例工程。該範例的使用可以參閱Android平臺上手指南:HelloWeixin@Android。點選下載 簽名生成工具用於獲取安裝到手機的第三方應用簽名的apk包。點選下載

可以一個字串,類似於: 應用簽名:049a9fde46bfc5087f3825582208b248 安裝這個應用可以獲取本手機已經安裝的某個android軟體,根據軟體的包名,類似於: com.demo.AppX 來查詢這個軟體,以及獲取這個軟體的 應用簽名。 還有一個工具是在http://wiki.open.qq.com/wiki/mobile/SDK下載 Android_SDK_V2.3.1 的tools目錄下有一個 獲取簽名.apk ,這個也可以獲取,但是我測試發現,只能顯示一部分的本機應用,有些應用查不到,就麻煩了..

209.:app:lintVitalRelease

Failed converting ECJ parse tree to Lombok for file /home/yyb/work/BoShiTong/trunk/HBFC/Android/Comment/HBFC-AS2/app/src/main/java/com/jetsun/hbfc/widget/ioc/AbIocView.java java.lang.ClassCastException: lombok.ast.Annotation cannot be cast to lombok.ast.Expression

210.

Ignoring InnerClasses attribute for an anonymous inner class

211.

WebView 在Android4.4的手機上onPageFinished()回撥會多呼叫一次(具體原因待追查) 需要儘量避免在onPageFinished()中做業務操作,否則會導致重複呼叫,還有可能會引起邏輯上的錯誤. onPageStarted和onPageFinished 會載入兩次

212.Android WebView常見問題及解決方案彙總

http://blog.csdn.net/t12x3456/article/details/13769731

213.Android check network connectivity on some tablets crash

java.lang.NullPointerException at com.xxx.Util.getNetworkState(Util.java:246)

214.What is the equivalent of Eclipse “Custom debug Keystore” in Android studio?
http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studio
215.Android Studio在除錯時,修改變數的值 在“Variables”視窗中,選擇需要修改的變數,然後右鍵,選“Set Value..."。快捷鍵F2
216.開啟百度定位導致MyApplication中的初始化重新載入一遍。如果此時有自動登入等,會導致重新登入 而目前的憑證失效
217.android webview和js互動json物件 。通過字串傳遞。然後通過jsonobject把字串生成json物件從中獲取資料。
218. Android Studio開發jni ndk

主要有以下三塊

  1. Javah生成JNI標頭檔案
    需要進入到/src/mian 這個目錄下 。如果不進入這個目錄等會執行javah的時候會提示: 錯誤: 找不到 'com.lcj.ndk_demo_2.HelloNDK' 的類檔案 javah -d jni -classpath ....\build\intermediates\classes\debug com.lcj.ndk_demo_2.HelloNDK jni 是生成的標頭檔案需要存放的資料夾(一般取名jni才對) ....\build\intermediates\classes\debug 是class所在目錄(Build—>Make Project生成的class檔案都在這裡,這是一個相對路徑)
    com.lcj.ndk_demo_2.HelloNDK 是class檔案的檔名(根據之前的java檔案生成的) 參考 http://wenku.baidu.com/view/105474098e9951e79b8927a3.html 2.根據上不生成的.h檔案 寫.c和makefile 3.ndk-build【這個androidstudio1.2已經整合,可以直接編譯ndk,所以多一個選擇】 易出現的問題 When running the ndk-build command I get the following error:
Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it

解決方案

NDK_PROJECT_PATH is an environment variable so you don't have to include in the Android.mkfile. Is nkd-build launched in the project directory?

For more info read the docs in docs/HOWTO.html in the NDK folder where I read

Starting with NDK r4, you can simply place the file under $PROJECT/jni/ and launch the 'ndk-build' script from your project tree.

If you want to use 'ndk-build' but place the file to a different location, use a GNU Make variable override as:

ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk
219.Android下使用lamemp3庫將PCM錄音資料壓縮為MP3格式
        文章最下面有demo 很不錯 通過javah修改下,可以直接用
   來源:    http://ikinglai.blog.51cto.com/6220785/1228730
220.Android Studio 不自動彈起程式碼提示功能解決辦法 do not auto popup code completion

升級後不自動彈起程式碼提醒功能了,而且變數也不標註顏色,簡直是氣死我了,Google了各種關鍵詞,都沒辦法 後來看到有個Power Save Mode,昨天看到筆記本發熱厲害就給勾上了,是不是這個原因呢? 取消之後一切正常,看來是省電模式下禁用了這些功能,通過反射來實現程式碼的autoComplete是會增加CPU運算量。

File-->Power Save Mode .勾掉省電模式 參考:http://blog.csdn.net/ameryzhu/article/details/14105275

221. 百度地圖相關 在Genymotion上啟動專案時,程式丟擲異常
  1. 問題描述: 1、在Genymotion上啟動專案時,程式丟擲異常,報錯日誌為:11-10 09:18:44.577: E/com.btten.base.CrashReportHandler(1298): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: load_library[1093]: Library '/system/lib/libhoudini.so' not found

  2. 問題分析: 1、鑑於Genymotion是隻支援x86架構的,所以從.so檔案入手找問題,專案中匯入了jpush的.so配置檔案,jpush官網上的解釋通常都是http://docs.jpush.cn/pages/viewpage.action?pageId=7864765,新建x86、mips 、armeabi-v7a幾個目錄,然後把libjpush.so也複製一份過去。嘗試之後發現不起作用。

  3. 解決辦法: 1、網上找了很久發現如下辦法,下載一個ARM Translation Installer的壓縮包,安裝到Genymotion上,重啟下,重新執行程式,ok,問題順利解決。簡要摘抄步驟如下: Download the following ZIPs: ARM Translation Installer v1.1 Hosted by FILETRIP(Mirrors) - If you have issues flashing ARM Trnaslation, Try re-downloading from a mirror Download the correct GApps for your Android version: If you have issues flashing GApps, Try re-downloading from a mirror Google Apps for Android 4.4(Mirror)(Download from CM11 Links)(4.4 GApps might be buggy) Google Apps for Android 4.3(Mirrors) Google Apps for Android 4.2 Google Apps for Android 4.1 Next Open your Genymotion VM and go to the Homescreen Now Drag&Drop the Genymotion-ARM-Translation.zip onto the Genymotion VM window. It should say "File transfer in progress", once it asks you to flash it click 'OK' Now Reboot your VM using ADB or an app like ROM Toolbox. If nescessary you can simply close the VM window, but I don't recommend it.

    詳情轉載地址:http://forum.xda-developers.com/showthread.php?t=2528952

222. 百度地圖相關。E/baidumapsdk﹕ Authentication Error errorcode: -1 uid: -1 appid -1 msg: AndroidManifest.xml的application中沒有meta-data標籤
223. 百度地圖相關 百度地圖去掉縮放按鈕

MapView放在ScrollView中,滾動時出現黑條 http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=1093 應該GLSurfaceView放在ScrollView內部的問題.1.3.5用View直接繪製沒有問題.能否在下版中提供一個底層基於View繪製的MapView

版主,我在想,當滾動用擷取當前地圖的bitmap.(呼叫getCurrentMap())然後蓋在GLSurface上.但getCurrentMap()操作是非同步的,用android自帶的View.getDrawingCache()也未能成功獲取.上述不成功後,由於需求限制可以對地圖不操作,嘗試了下能不能再MapView完成地圖載入後getCurrentMap()把截圖放在ImageView中蓋在MapView上,但未能找到相應的監聽方法.見貼:http://bbs.lbsyun.baidu.com/viewthread.php?tid=1104&extra=page%3D1.現在改用1.3.5在做.QQ:396920165能否交流下

scrollview內嵌mapview後的滑動問題

百度地圖mapview放在scrollview中滑動黑屏

後面我試下了直接用截圖功能。mapview設定隱藏,然後方法沒被執行。是不是在mapview 不顯示的情況下。截圖功能不可用? 開始移動前截圖覆蓋 靜態。不可拖動但是可要能點選

建議不要在scroll中使用mapview 因為本身map是用opengl繪製的,這個東西在scroll中存在效能問題,所以導致的體驗效果不佳,請考慮改變實現方式。

百度map1.3.5 http://developer.baidu.com/map/reference/index.php?title=Class:android%E6%A0%B8%E5%BF%83%E7%B1%BB/MapView

靜態【不可放大縮小】的mapview。點選無效

http://www.cnblogs.com/trinea/archive/2012/11/14/2770433.html

224.Android自定義DataTimePicker(日期選擇器) http://blog.csdn.net/wwj_748/article/details/38778631
225.Content-Type: application/x-www-form-urlencoded;

可以通過mitmproty分析

https://www.imququ.com/post/four-ways-to-post-data-in-http.html

四種常見的 POST 提交資料方式

application/x-www-form-urlencoded multipart/form-data text/xml application/json text/xml

226.androidstudio 升級後無法使用git svn等程式碼管理工具。

vcs -->Enable Version Control Integration 選擇git/subversion 即可

227.androidstudio 升級後發現 編寫程式碼自動提醒功能沒了。

原因在於開啟了File--->Power Saved Mode,關閉即可。

228.dshow 音訊採集
229.kill -SIGKILL PID

強行中止(經常使用殺掉)一個程式標識號為324的程式:   #kill -9 324   (2)解除Linux系統的死鎖    在Linux中有時會發生這樣一種情況:一個程式崩潰,並且處於死鎖的狀態。此時一般不用重新啟動計算機,只需要中止(或者說是關閉)這個有問題的程式 即可。當kill處於X-Window介面時,主要的程式(除了崩潰的程式之外)一般都已經正常啟動了。此時開啟一個終端,在那裡中止有問題的程式。比 如,如果Mozilla瀏覽器程式出現了鎖死的情況,可以使用kill命令來中止所有包含有Mozolla瀏覽器的程式。首先用ps命令查詢該程式的 PID,然後使用kill命令停止這個程式:   #kill -SIGKILL XXX   其中,XXX是包含有Mozolla瀏覽器的程式的程式標識號。   (3)使用命令回收記憶體   我們知道記憶體對於系統是非常重要的,回收記憶體可以提高系統資源。kill命令可以及時地中止一些"越軌"的程式或很長時間沒有相應的程式。例如,使用top命令發現一個無用(Zombie)的程式,此時可以使用下面命令:   #kill -9 XXX   其中,XXX是無用的程式標識號。   然後使用下面命令:   #free   此時會發現可用記憶體容量增加了。   (4)killall命令   Linux下還提供了一個killall命令,可以直接使用程式的名字而不是程式標識號,例如:   # killall -HUP inetd

#####230.android匯入eclipse專案後,出現如下問題

1.Error:The project is using an unsupported version of the Android Gradle plug-in (0.12.2). The recommended version is 1.2.3.

classpath 'com.android.tools.build:gradle:1.2.3'

在build.gradle 根據提示把 dependencies { classpath 'com.android.tools.build:gradle:0.12.+' }

修改為 dependencies { classpath 'com.android.tools.build:gradle:1.2.3' }

2.上面修改後會出現如下錯誤:

Error:Unable to load class 'org.codehaus.groovy.runtime.typehandling.ShortTypeHandling'. Possible causes for this unexpected error include:You are using JDK version 'java version "1.7.0_71"'. Some versions of JDK 1.7 (e.g. 1.7.0_10) may cause class loading errors in Gradle. Please update to a newer version (e.g. 1.7.0_67).

明明用的就是jdk1.7.0_71[比1.7.0_67還新] 卻提示不對,問題起始不在jdk這而是 gradle-wrapper.properties

distributionUrl=http://services.gradle.org/distributions/gradle-1.12-all.zip 估計用的是jdk1.7.0.10

把 distributionUrl=http://services.gradle.org/distributions/gradle-1.12-all.zip 修改為 distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip

ok 經過上面兩步,從studio匯入eclipse專案的正常使用。

#####231.android 註釋模板 Settings-->Editor-->File and Code Templates-->Includes

#####232.shape中子節點的常用屬性

  1. <gradient> 漸變

android:startColor 起始顏色 android:endColor 結束顏色 android:angle 漸變角度,0從上到下,90表示從左到右,數值為45的整數倍預設為0; android:type 漸變的樣式 liner線性漸變 radial環形漸變 sweep

例如:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    type="rectangle">
    <gradient
        android:angle="270"
        android:endColor="#9f36a0"
        android:startColor="#65216a" />
</shape>

2.<corners > 圓角 android:radius 圓角的半徑 值越大角越圓

android:topRightRadius 右上圓角半徑

android:bottomLeftRadius 右下圓角角半徑

android:topLeftRadius 左上圓角半徑

android:bottomRightRadius 左下圓角半徑 如果你把4個角設成為90的話,那麼改圖片是一個圓! 3.<solid > 填充android:color 填充的顏色

4.<stroke > 描邊 android:width 描邊的寬度 android:color 描邊的顏色 android:dashWidth 表示'-'橫線的寬度 android:dashGap 表示'-'橫線之間的距離

參考 http://blog.csdn.net/cs_li1126/article/details/11781577

#####233. GestureOverlayView

#####234.Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in); #####235. 使用volley 錯誤時,無法看到詳細的資訊。 可以有兩種方式處理

方法1.抓包 通過Fiddler抓包,在ubuntu系統下通過mitmproty來抓包。或者android4.4chrome瀏覽器--工具--檢查裝置來抓包。

方法2. 參考 Android: How handle message error from the server using Volley? 在gsonrequest中重寫parseNetworkError 如下: //In your extended request class

@Override 
protected VolleyError parseNetworkError(VolleyError volleyError){
        if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
                VolleyError error = new VolleyError(new String(volleyError.networkResponse.data));
                volleyError = error;
            } 
 
        return volleyError;
    } 
} 

還要提示一點排查錯誤資訊可以通過androidstudio的篩選 error volley。來直觀的看到錯誤的狀態碼。 NetworkError ClientError ServerError AuthFailureError ParseError NoConnectionError TimeoutError

知其然,還要知其所以然

BasicNetwork.java 中函式 performRequest執行錯誤時會丟擲錯誤。 throw new ServerError(networkResponse);

networkResponse的類如下: public class NetworkResponse { public final int statusCode; public final byte[] data; public final Map<String, String> headers; public final boolean notModified; ...... } 所以重寫gsongrequest中的 方法parseNetworkError。通過networkResponse的data獲得更詳細的錯誤資訊資訊。

#####236. url編碼 遇到一個很奇怪的問題,同一個url在手機端請求 返回400【頁面不存在】 而把這個url放在pc瀏覽器請求卻是好的。 最後發現是url中有個空格 。在app上沒有進行url.encode 導致。至於pc上請求沒問題是自動做了url編碼處理。 切記 請求的url有特殊字元 如空格 加號等,一定要url編碼。

#####237. How to add a header to a listView which is inside SwipeRefreshLayout?http://stackoverflow.com/questions/27048416/how-to-add-a-header-to-a-listview-which-is-inside-swiperefreshlayouthttps://code.google.com/p/android/issues/detail?id=80227 上述是2014年12月份報的android自身 bug。先已經修改

android.widget.ListView{41ad4e90 VFED.VC. .F...... 0,0-720,1110 #7f090078 app:id/listview}

#####238. 定義鍵盤 會遇到“當按返回鍵介面退出,但虛擬鍵盤沒有消失的現象”針對這個問題,可以在onpause中強制隱藏它。程式碼如下。 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(et_content.getWindowToken(), 0);

#####239. 程式碼混淆導致問題,快速定位 在程式碼混淆打包時,遮蔽了用到的第三方庫,以及常規的android混淆遮蔽,但生成的apk,執行還是會崩潰。事出必有因,後來分析找到原因是使用greendao自動生成的java-gen下package中的內容沒有遮蔽程式碼混淆,導致儲存資料庫時,報a(SourceFile:) NullPointerException **** 混淆打包apk,執行崩潰 總結如下:

我們在打包時,debug版本沒問題,但混淆後release版本有時會出現異常崩潰, 比如:**a(SourceFile:) NullPointerException **

針對這種情況,可以通過抓UncaughtExceptionHandler崩潰日誌或者第三方比如雲測工具檢視崩潰的原因。在androidstudio下還有一種更好的方式。

在androidstudio中可以設定debug下也混淆,通過android log直觀的、快速的定位問題所在

 signingConfigs {
            release {

            }

            debug{

            }
   }

    }

    buildTypes {
        release {
            // 不顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release  //使用上述簽名資訊

         }
        }
        debug {
            minifyEnabled true
            // 移除無用的resource檔案
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

#####240 通過gif展示一個效果是否直觀,Ubuntu平臺gif動畫錄製工具可以使用命令列,錄製的效果很好,並且錄製gif大小很小。 byzanz-record --duration=30 --x=0 --y=50 --width=500 out.gif 引數說明 --duration 錄製的時長 --x錄製開始的x座標 --y錄製開始的y座標 --width 寬度 out.gif 輸出檔名

#####241.微信開放平臺申請流程 http://bbs.mob.com/thread-95-1-4.html 命令操作如下

keytool -list -keystore keystore檔案路徑 得到對應app的祕鑰 把:去掉,大寫轉小寫即可。

#####242.編譯ijkplayer時,報錯 NDK r10: Fix make-standalone-toolchain.sh "<<<" bashism

這個是android官方問題 把for ABI in $(tr ',' ' ' <<< $ABIS); do 修改為 for ABI in $(echo "$ABIS" | tr ',' ' '); do

https://code.google.com/p/android/issues/detail?id=74145 #####243.ubuntu nginx rtmp流媒體伺服器的安裝 Setup Nginx-RTMP on Ubuntu 14.04
英文文件 https://www.vultr.com/docs/setup-nginx-rtmp-on-ubuntu-14-04 中文文件 http://www.cnblogs.com/cocoajin/p/4353767.html

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 80埠被佔用解決方法:

sudo fuser -k 80/tcp sudo service nginx start

#####242.ubuntu檢視佔用某埠的程式 檢視埠使用情況,使用netstat命令。 檢視已經連線的服務埠(ESTABLISHED netstat -a 檢視所有的服務埠(LISTEN,ESTABLISHED) netstat -ap
檢視8080埠,則可以結合grep命令:netstat -ap | grep 8080

1. 顯示佔用某個埠的程式
lsof -i:80
lsof -i:5000
2. 顯示某個程式是否在執行,檢視某個執行的程式
ps -aux | grep "paster"
ps -aux | grep apache2

#####243.架構師編寫詳細設計的重要性。 詳細設計,這是考驗技術專家設計思維的重要關卡,詳細設計說明書應當把具體的模組以最’乾淨’的方式(黑箱結構)提供給編碼者,使得系統整體模組化達到最大;一份好的詳細設計說明書,可以使編碼的複雜性減低到最低,實際上,嚴格的講詳細設計說明書應當把每個函式的每個引數的定義都精精細細的提供出來,從需求分析到概要設計到完成詳細設計說明書,一個軟體專案就應當說完成了一半了。換言之,一個大型軟 件系統在完成了一半的時候,其實還沒有開始一行程式碼工作。 #####244.http請求的url含有中字元時,需要Uri編碼。Uri.encoder() #####245.使用androidstudio時,不知道什麼原因svn不見了
Android Studio missing Subversion plugin

Please make sure that the "SubversionIntegration" plugin is enabled in Preferences > Plugins

#####246.Error:Execution failed for task ':app:dexDebug'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/home/xxx/tools/android/jdk1.7.0_71/bin/java'' finished with non-zero exit value 2

檢查下是否多次引用同一個jar包 以下情況

  1. module下jar包版本不同

  2. 同一個module 在libs中包含樂.jar,而在src下又把相應的source頁加入了

  3. gradle中是否重複編譯,

比如 已經加了compile fileTree(include: ['*.jar'], dir: 'libs') 然而在下面又加一句compile files('libs/xxx.jar')

參考 Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException

#####246.android handler的警告Handler Class Should be Static or Leaks Occur 在使用Handler更新UI的時候public class SampleActivity extends Activity {

private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO } } }會包上述warning 會導致記憶體洩露 原因在於匿名內部類handler持有activity的引用,當activity finish後 handler還沒有處理完,導致activity的view和resource資源不能得到釋放,導致記憶體洩露 針對這個問題google官方給出了正確的做法 通過靜態內部類 包含activity的弱引用來處理。 public class SampleActivity extends Activity {

/**

  • Instances of static inner classes do not hold an implicit
  • reference to their outer class. */ private static class MyHandler extends Handler { private final WeakReference mActivity;
public MyHandler(SampleActivity activity) {
  mActivity = new WeakReference<SampleActivity>(activity);
}
     
@Override
public void handleMessage(Message msg) {
  SampleActivity activity = mActivity.get();
  if (activity != null) {
    // ...
  }
}

}

private final MyHandler mHandler = new MyHandler(this);

/**

  • Instances of anonymous classes do not hold an implicit
  • reference to their outer class when they are "static". */ private static final Runnable sRunnable = new Runnable() { @Override public void run() { } };

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// Post a message and delay its execution for 10 minutes.
mHandler.postDelayed(sRunnable, 60 * 10 * 1000);
         
// Go back to the previous Activity.
finish();

} }

參考android handler的警告Handler Class Should be Static or Leaks Occur

#####247.androidstudio不同tab切換 ctrl+tab

#####248.androidstudio 如何自動import用到的類或介面? For Windows/Linux, you can go to File -> Settings -> Editor -> General -> Auto Import -> Java and make the following changes:

change Insert imports on paste value to All

markAdd unambigious imports on the fly option as checked
On a Mac, do the same thing in Android Studio -> Preferences

參考What is the shortcut to Auto import all in Android Studio?

#####249.Android NDK: Could not find application project directory ! Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/home/cenuser/android/android-ndk-r7b/build/core/build-local.mk:130: *** Android NDK: Aborting . Stop.

cd到jni目錄。或者 ndk-build -C your_project_path

#####250 .Why do I want to avoid non-default constructors in fragments? fragment設定引數正確的做法

Make a bundle object and insert your data (in this example your Category object). Be careful, you can't pass this object directly into the bundle, unless it's serializable. I think it's better to build your object in the fragment, and put only an id or something else into bundle. This is the code to create and attach a bundle:

Bundle args = new Bundle();
args.putLong("key", value);
yourFragment.setArguments(args);
After that, in your fragment access data:

Type value = getArguments().getType("key");
That's all.

#####251. ubuntu下刪除.svn的方法

find -type d -name '.svn' -exec rm -rfv {} \;

參考 http://blog.csdn.net/zhaoyu7777777/article/details/9445717

#####252. Fatal : Could not read from remote repository. git配置使用,已經把公鑰發給發給服務端,在終端命令列也是可以正常的pull push,但是在androidstudio push或者pull的時候確出現上述錯誤 解決方式 setting --> Version Control -->Git ,In the SSH executable dropdown, choose Native

#####253. ubuntu獲取證照指紋的命令 keytool -list -keystore xxx.keystore eg:檢視debug.keystore keytool -list -keystore ~/.android/debug.keystore #####254. mac 命令列安裝軟體 通過brew安裝,相當於ubuntu中得apt-get 首先安裝brew curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
然後就可以使用brew安裝軟體了 比如 使用brew安裝軟體 brew install wget
#####255.程式碼混淆時 報如下錯誤 Error:Execution failed for task ':app:proguarxxxRelease'.

java.io.IOException: Can't read [/libs/xxx.jar] (No such file or directory)http://stackoverflow.com/questions/26028171/android-studio-proguard-java-io-ioexception-bin-classes-no-such-file-or-d

解答 proguard-android.txt檔案中不用在指定 -injars, -outjars, or -libraryjars or libs.

The Android Gradle plugin already specifies all input and output for you, so you must not specify -injars, -outjars, or -libraryjars.

Moreover, the file proguard-android.txt in the Android SDK specifies all generic Android settings for you, so you shouldn't specify them again.

Essentially, your file proguard-rules.txt can be empty, except for any application-specific settings to make sure any reflection continues to work

#####256.Android中如何設定RadioButton在文字的右邊,圖示在左邊 解決方法 : 第一步: android:button="@null"這條語句將原來系統的RadioButton圖示給隱藏起來。 第二步: android:drawableRight="@android:drawable/btn_radio"這條語句 參考 http://blog.csdn.net/sunnyfans/article/details/7901592

#####257.java報“非法字元: \65279 ”錯誤的解決方法

眾所周知,在跨程式的工程中,統一編碼是至關重要的,而目前最普遍的則是統一採用“utf8”編碼方案。 但是在採用utf8方案的時候,請注意編輯器的自作聰明。 比如editplus。 原因就在於某些編輯器會往utf8檔案中新增utf8標記(editplus稱其為簽名),它會在檔案開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM),它的表示的是 Unicode 標記(BOM)。 參考 http://hyl198611.iteye.com/blog/1336981 #####258.手機root後 還會出現下述情況Android: adb: copy file to /system (Permission denied) 解決方式,需要remount /system mount -o remount,rw /system #####259.androidstudio 手動新增assets檔案 路徑在哪 XXX\src\main\assets
#####260.android雙擊back退出

public class MainActivity extends Activity {


    private Toast toast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toast = Toast.makeText(getApplicationContext(), "確定退出?", 0);

    }
    public void onBackPressed() {
        quitToast();
    }

    private void quitToast() {
        if(null == toast.getView().getParent()){
            toast.show();
        }else{
            System.exit(0);
        }
    }
}

或者

private Toast toast;
 protected void onCreate(Bundle savedInstanceState) {
 	...
         toast = Toast.makeText(this, "再按一次退出應用", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.BOTTOM, 0, ConversionUtil.dip2px(this, 150));
 }
@Override 
public void onBackPressed() { 
    if (doubleBackToExitPressedOnce) { 
        if(toast!=null){
            toast.cancel();
        }
        super.onBackPressed(); 
        return; 
    } 
 
    this.doubleBackToExitPressedOnce = true;
    toast.show();
 
    new Handler().postDelayed(new Runnable() {
 
        @Override 
        public void run() { 
            doubleBackToExitPressedOnce=false;                        
        } 
    }, 2000); 
}  

參考 Android關於雙擊退出應用的問題 #####261.anroid幾個很不錯的快捷鍵

  1. Ctrl+Shift+Alt+T 重構程式碼 change name
  2. Ctrl+I 水平分屏顯示【需要在keymap中搜尋split 設定move right的快捷鍵】
  3. shift+alt+L 變數生成
  4. ctrl+shift+v
    #####262.在舊專案中引入android materialdesign 時 出現如下問題 android.view.InflateException: Binary XML file line #17: Error inflating class android.support.design.internal.NavigationMenuView Caused by: java.lang.reflect.InvocationTargetException Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f0100c5 a=-1} You need to use a Theme.AppCompat theme (or descendant) with this activity.

解決方法 :使用NavigationMenuView的Activity【一般都是mainActivity】繼承自AppCompatActivity,並且修改AndroidManifest.xml中對應activity的theme,使用繼承自@style/Theme.AppCompat的主題。 #####262.How to get key and value of HashMap in java

public class AccessKeyValueOfHashMap {
        public static void main(String[] args) {
                // Create a Empty HashMap 
                HashMap<String, String> obHashMap = new HashMap<String, String>();
                // Put values in hash map
                obHashMap.put("AB", "1");
                obHashMap.put("EF", "2");
                obHashMap.put("Gh", "3");
                obHashMap.put("CD", "4");
                //Store entry (Key/Value)of HashMap in set
                Set mapSet = (Set) obHashMap.entrySet();
                //Create iterator on Set 
                Iterator mapIterator = mapSet.iterator();
                System.out.println("Display the key/value of HashMap.");
                while (mapIterator.hasNext()) {
                        Map.Entry mapEntry = (Map.Entry) mapIterator.next();
                        // getKey Method of HashMap access a key of map
                        String keyValue = (String) mapEntry.getKey();
                        //getValue method returns corresponding key's value
                        String value = (String) mapEntry.getValue();
                        System.out.println("Key : " + keyValue + "= Value : " + value);
                }
        }
}

#####263. 設定鍵盤迴車為傳送建

        android:imeOptions="actionSend"
        android:inputType="text"

#####264. editText 取消背景格式 取消下劃線等自帶樣式 去掉下劃線只需把背景設定成為“@null”, 如果想設為其他樣式也是設定背景

#####265. How to build an .so binary for a device with a 64-bit CPU?

latest version of the NDK (right now it's r10e)
Application.mk
APP_ABI := armeabi arm64-v8a armeabi-v7a x86 mips

#####266. Android NDK for x86_64 has no reference for bcopy and index

You can fix this cleanly with a single line in Application.mk (docs):

APP_CFLAGS += -DSTDC_HEADERS

#####267.Error:Execution failed for task ':xxx:processDebugManifest'. > Manifest merger failed : uses-sdk element cannot have a "tools:node" attribute

This has been updated to reflect the release of API 21, Lollipop. Be sure to download the latest SDK.

In one of my modules I had the following in build.gradle:

dependencies {
    compile 'com.android.support:support-v4:+'
}
Changing this to

dependencies {
    // do not use dynamic updating.
    compile 'com.android.support:support-v4:21.0.0' 
}
fixed the issue.

參考Manifest merger failed : uses-sdk:minSdkVersion 14

#####268.Error:(1, 1) A problem occurred evaluating project 'xxx'. > Could not create plugin of type 'LibraryPlugin'.

修改了build.gradle中的gradle 也要修改gradle-wrapper.properties 例如:

build.gradle
  dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
    gradle-wrapper.properties
  distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

#####269.androidstudio Building Apps with Over 65K Methods

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

#####270.Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.Pools$SimplePool

http://stackoverflow.com/questions/25477860/error-inflating-class-android-support-v7-widget-recyclerview

#####271.Caused by: java.lang.NoSuchMethodException: [class android.content.Context, interface android.util.AttributeSet]

http://stackoverflow.com/questions/11753719/how-do-i-properly-extend-a-layout-class

#####272.java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{423a4c60 position=4 id=-1, oldPos=1, pLpos:1 scrap tmpDetached not recyclable(1) no parent}

#####273.Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]http://stackoverflow.com/questions/6056564/installation-error-install-parse-failed-manifest-malformed I was having this error because i had capital letters in my package name like this

Com.Example.packagename after i had changed it to something like

com.example.packagename it was solved

#####273.解決異常Circular dependencies cannot exist in RelativeLayout RelativeLayout中存在迴圈的相關 #####274.java.lang.ClassNotFoundException 使用MultiDex 後,執行時發現有些crash或者有些類無法呼叫 報NoClassDefFound error 首先正確使用 google的multipartdex

  1. 修改Gradle,匯入'com.android.support:multidex:1.0.0',開啟multiDexEnabled;
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}
  1. 修改Application.兩種方法:

    1. 直接把Application替換成MultiDexApplication
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>
  1. 在原來的Application中修改呼叫MultiDex.install(this);
public class HelloMultiDexApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

如果做了上面處理,依舊NoClassDefFound error 通過如下方式處理: 一些在二級Dex載入之前,可能會被呼叫到的類(比如靜態變數的類),需要放在主Dex中.否則會ClassNotFoundError. 通過修改Gradle,可以顯式的把一些類放在Main Dex中.

參考Android 分Dex (MultiDex)

#####275.Linux 32 Bit Libraries sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 #####276.Android Material Design TabLayout.when more than screen width scroll when less than screen width fill Android TabLayout,當tab總寬度少於一屏時候,擴充套件為螢幕寬度展示.當tab總寬度大於一屏時,滾動顯示

Tab gravity only effects MODE_FIXED.

One possible solution is to set your layout_width to wrap_content and layout_gravity to center_horizontal:

<android.support.design.widget.TabLayout
    android:id="@+id/sliding_tabs"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    app:tabMode="scrollable" />
If the tabs are smaller than the screen width, the TabLayout itself will also be smaller and it will be centered because of the gravity. If the tabs are bigger than the screen width, the TabLayout will match the screen width and scrolling will activate.

參考Android Support Design TabLayout: Gravity Center and Mode Scrollable #####277. android多渠道打包

目前採用的方案是,在AndroidManifest.xml檔案中配置

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />

在app的build.gradle檔案中配置

android{
 //用於生成不同渠道號
    productFlavors {
        wandoujia {}
        baidu {}
        yingyongbao{}
        ...

    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

}

這樣編譯時會生成對應的渠道包apk.現在問題來了,如果有幾十個渠道,會生成對應幾十個apk包.打包編譯一個apk一般需要1分鐘左右(和電腦配置有關).那麼打包幾十個要幾十分鐘的時間.確實挺費時間的.那麼有沒有好的方式吶? 當然是有的 我們可以採用如下方案處理.通過檔案配置只需要生成一個apk包

此種方法是需要建立檔案的。
我們在寫完我們的程式碼之後,在app/src下面,分別建立和main同級目錄的資料夾umeng, wandoujia, yingyongbao,這三個資料夾裡面都各只有一個AndroidManifest.xml檔案,檔案只需要如下:
[plain] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="your.package.name">  
    <application>  
  
          <meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>  
  
    </application>  
</manifest>  
注意,上面的value的值要和你的渠道名所對應。比如wandoujia裡面要對應為你豌豆莢上的渠道名(如WANDOUJAI)。
然後在你的build.gradle的android{}節點裡面,新增productFlavors節點,程式碼如下:
[plain] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
android {  
    // 這裡是你的其他配置  
  
    productFlavors{  
        umeng{  }  
        wandoujai {  }  
        yingyongbao{  }  
    }  
    // 你的其他配置  
}  
注意這裡的flavors的名字要和你的資料夾的名字對應。這樣配置之後,構建的就是多渠道的APK了。

參考 Gradle實現的兩種簡單的多渠道打包方法

#####278 Tcpdump抓包

有些模擬器比如genymotion自帶了tcpdump,如果沒有的話,需要下載tcpdump: http://www.strazzere.com/android/tcpdump

把tcpdump push到/data/local下,抓包命令:

#####279 檢視簽名

很多開發者服務都需要繫結簽名資訊,用下面的命令可以檢視簽名:

#####280 系統日誌中幾個重要的TAG

#####281 一行居中,多行居左的TextView

這個一般用於提示資訊對話方塊,如果文字是一行就居中,多行就居左。 在TextView外套一層wrap_content的ViewGroup即可簡單實現:

#####282 setCompoundDrawablesWithIntrinsicBounds()

網上一大堆setCompoundDrawables()方法無效不顯示的問題,然後解決方法是setBounds,需要計算大小…

不用這麼麻煩,用setCompoundDrawablesWithIntrinsicBounds()這個方法最簡單!

#####282 更新媒體庫檔案

以前做ROM的時候經常碰到一些第三方軟體(某音樂APP)下載了新檔案或刪除檔案之後,但是媒體庫並沒有更新,因為這個是需要第三方軟體主動觸發。

#####283 Monkey引數

大家都知道,跑monkey的引數設定有一些要注意的地方,比如太快了不行不切實際,太慢了也不行等等,這裡給出一個參考:

一邊跑monkey,一遍抓log吧。

#####284 強大的dumpsys

dumpsys可以檢視系統服務和狀態,非常強大,可通過如下檢視所有支援的子命令:

這裡列舉幾個稍微常用的:

媒體庫會在手機啟動,SD卡插拔的情況下進行全盤掃描,不是實時的而且代價比較大,所以單個檔案的重新整理很有必要。

注[278-284來源於]  你應該知道的那些Android小經驗

#####285. 在佈局檔案時,在xml視覺化檔案中看到效果,而又不影響最終展示.可以通過tools來協助 比如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <ProgressBar
        android:id="@+id/progress_loading"
        android:layout_width="75dp"
        android:layout_height="60dp"/>

    <TextView
        android:id="@+id/tv_reload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:src="@drawable/refresh_big"
        android:scaleType="centerInside"
        android:visibility="gone"
        tools:text="點我,重新載入"
        tools:visibility="visible"/>
</RelativeLayout>

加填充xml檔案時,TextView是隱藏的,但又想在xml中直觀的看到它顯示後的整體效果.藉助xmlns:tools="http://schemas.android.com/tools" 完美實現.

參考android中xml tools屬性詳解 #####286. android studio對於錯誤拼寫/不識別的英文單詞,給予波浪提示。 Spellchecker inspection helps locate typos and misspelling in your code, comments and literals, and fix them in one click android studio對於錯誤拼寫/不識別的英文單詞,給予波浪提示 選中單詞,單擊滑鼠右鍵 spelling Save ‘xxx’ to dictionary.. #####287. Warning: Use '$' instead of '.' for inner classes (or use only lowercase letters in package names); replace .with $

Package names are written in all lower case to avoid conflict with the names of classes or interfaces. 包名小寫,避免和類名或介面名衝突 #####288. JNI undefined reference to `__android_log_print'

android {
    defaultConfig {
        ndk {
            moduleName "your_module_name"
            ldLibs "log"
        }
    }
}

參考undefined reference to `__android_log_print'

#####289. gradle升級到gradle2.10後出現如下問題

Error:Execution failed for task ':xxx:packageReleaseResources'.

xxxx/res/drawable/data.bin: Error: The file name must end with .xml or .png

解決方案 Restart Eclipse (unfortunately) and the problem will go away. 參考Android: failed to convert @drawable/picture into a drawable

#####290. No JDK found. Please validate either STUDIO_JDK, JDK_HOME or JAVA_HOME environment variable points to valid JDK installation.

我安裝了android-studio,通過命令列可以啟動androidstudio,但是建立啟動器後啟動失敗

解決方案: 參考http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=466830 不能有多餘的空白字元。 你完全可以用desktop-file-validate xxx.desktop命令來檢驗 用xdg-open xxx.desktop看報錯沒有

#####291. $ adb devices List of devices attached adb server version (32) doesn't match this client (35); killing... error: could not install smartsocket listener: Address already in use ADB server didn't ACK

  • failed to start daemon * error: cannot connect to daemon

同一類問題 android studio 識別不到 genymotion device

解決方案 https://m.oschina.net/blog/647554 http://blog.csdn.net/wuyuxing24/article/details/45169991 設定好之後重啟下genymotion以及androidstudio

#####292. Error:No cached version of com.android.tools.build:gradle:1.2.3 available for offline mode. Disable Gradle 'offline mode' and sync project

使用匹配的gradle 2.0.0 2.10.0

#####293. xxx/IxxxbackService.aidl Error:(31) couldn't find import for class com.kugou.common.module.fm.IxxFmPlayStateListener Error:(33) couldn't find import for class com.kugou.common.service.ringtone.IxxRingtonePlayStateListener Error:Execution failed for task ':androidkugou:compileDebugAidl'.

java.lang.RuntimeException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/home/yabinyang/tools/sdk/build-tools/22.0.1/aidl'' finished with non-zero exit value 1

選擇匹配的 buildToolsVersion rebuild

#####294.java中 volatile static結合使用 static 靜態 volatile 不穩定的 JAVA 裡static 和volatile的區別

變數放在主存區上,使用該變數的每個執行緒,都將從主存區拷貝一份到自己的工作區上進行操作。

volatile, 宣告這個欄位易變(可能被多個執行緒使用),Java記憶體模型負責各個執行緒的工作區與主存區的該欄位的值保持同步,即一致性。

static, 宣告這個欄位是靜態的(可能被多個例項共享),在主存區上該類的所有例項的該欄位為同一個變數,即唯一性。

volatile, 宣告變數值的一致性;static,宣告變數的唯一性。

此外,volatile同步機制不同於synchronized, 前者是記憶體同步,後者不僅包含記憶體同步(一致性),且保證執行緒互斥(互斥性)。
static 只是宣告變數在主存上的唯一性,不能保證工作區與主存區變數值的一致性;除非變數的值是不可變的,即再加上final的修飾符,否則static宣告的變數,不是執行緒安全的。

1) If a field is declared static, there exists exactly one incarnation of the field, no matter how many instances (possibly zero) of the class may eventually be created. 

2) A field may be declared volatile, in which case the Java Memory Model ensures that all threads see a consistent value for the variable。

295.ids的作用和使用場景

作用:通過ids.xml中事先定義好id,在使用時候不用重新生成對應的id,提高效能和可維護性。優化編譯效率。統一管理資源Id。 eg:如果沒有ids.xml中定義。在layout檔案中宣告方式如下@+id/xxx。 如果定義過,使用方式如下@id/xxx 即不用加"+"號。 使用場景,對於需要同意管理資源id的場景,比如框架id 參考android專案中values中ids.xml的作用

296.音樂領域,什麼是EQ?

EQ就是均衡器equalizer的縮寫。在高階一點的混音器上,都會有EQ的調整鈕。一般來說,EQ調整的都是音軋的播放的高音量(terble)、中音(middle)、以及重音(bass)的音樂頻變化

297.Android, ListView IllegalStateException: “The content of the adapter has changed but ListView did not receive a notification”

http://stackoverflow.com/questions/3132021/android-listview-illegalstateexception-the-content-of-the-adapter-has-changed

298. 在mac os上安裝了oracle官網的jdk 1.7後,怎麼找不到具體jdk路徑了

一般在 /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home

299. Error:Could not read cache value from 'xxx/gradle/daemon/2.10/registry.bin'.

根據路徑找到registry.bin,刪除,重啟androidstudio即可。

300. Android: AlertDialog causes a memory leak
in the leaked activity's onDestroy(), set the AlertDialog's ListView's onItemClickListener() to null, which will release the reference to the listener an make whatever memory allocated within that listener to be eligible for GC. This way you won't get OOM. It's just a workaround and the real solution should actually be incorporated in the ListView.

Here's a sample code for your onDestroy():

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if(leakedDialog != null) { 
            ListView lv = leakedDialog.getListView();
            if(lv != null)  lv.setOnItemClickListener(null);
    } 
} 

對於adapter同理 參考 http://stackoverflow.com/questions/7083441/android-alertdialog-causes-a-memory-leak

301 viewpager setcurrentItem之後,呼叫相關的監聽 onpageSelected onPageChangedState onPageScrolled

如果是想在動畫執行完成之後,執行某些操作,可以通過如下方式

private class PageChangeListener implements OnPageChangeListener { 
 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
   } 
 
    @Override 
    public void onPageSelected(int position) {
        isPageChanged = true; 
    } 
 
    @Override 
    public void onPageScrollStateChanged(int state) {
        switch (state) {
        case ViewPager.SCROLL_STATE_IDLE:
            if (isPageChanged) { 
                updateCurrentPage();//this will be called when animation ends 
                isPageChanged = false; 
            } 
            break; 
        case ViewPager.SCROLL_STATE_DRAGGING:
            break; 
        case ViewPager.SCROLL_STATE_SETTLING:
            break; 
        } 
    } 
} 

參考Android viewpager animation

#####302 Instant Run does not support deploying build variants with multidex enabled, to a target with API level 20 or below. To use Instant Run with a multidex enabled build variant, deploy to a target with API level 21 or higher.");

http://stackoverflow.com/questions/36516931/instant-run-disabled-for-multidexed-application

#####303 java.util.ConcurrentModificationException at java.util.LinkedList$LinkIterator.next(LinkedList.java:124)

linkedlist 不是執行緒安全的,用ConcurrentLinkedQueue 參考 LinkedList多執行緒不安全的解決辦法

304 sqlite 出現 unrecognized token: "xxxx"

使用sql 語句中,如果有字串,必須加上 ‘ ‘單括號 括起來

You need to escape the filename parameter. The punctuation in the filename is confusing SQLite. You could do it by surrounding the filename in 'single quotes' in the string you pass in to SQLite, but it`s cleaner and safer to pass it as a separate argument, like this:

sqliteDatabase.update(AndroidOpenDbHelper.TABLE_FILE, values, 
        AndroidOpenDbHelper.COLUMN_NAME_FILE_NAME+"=?", new String[] {filename});
	

android.database.sqlite.SQLiteException: unrecognized token:

305 ScrollView巢狀ListView,listItem.measure(0,0);報空指標異常NullPointerException
當呼叫listItem.measure(0, 0);報空指標時問題:
檢查Adapter適配時Item的根容器為RelativeLayout,
報錯原因:
In platform version 17 and lower, RelativeLayout was affected by a measurement bug that could cause child views to be measured with incorrect MeasureSpec values. (See MeasureSpec.makeMeasureSpec for more details.) This was triggered when a RelativeLayout container was placed in a scrolling container, such as a ScrollView or HorizontalScrollView. If a custom view not equipped to properly measure with the MeasureSpec mode UNSPECIFIED was placed in a RelativeLayout, this would silently work anyway as RelativeLayout would pass a very large AT_MOST MeasureSpec instead.
This behavior has been preserved for apps that set android:targetSdkVersion="17" or older in their manifest`s uses-sdktag for compatibility. Apps targeting SDK version 18 or newer will receive the correct behavior
有三種解決方案:
一、升級版本到4.2.2
二、更改根容器為LinearLayout
三、在介面卡裡新增convertView.setLayoutParams(new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); convertView為Item的view

參考ScrollView巢狀ListView,listItem.measure(0,0);報空指標異常NullPointerException 動態計算listview的高度listItem.measure(0, 0)報空指標異常解決辦法

##### 306 Webview訪問https 報錯 primary error: 5 certificate: Issued to: CN=*

public void onReceivedSslError(final WebView view, final SslErrorHandler handler, SslError error) {
    Log.d("CHECK", "onReceivedSslError");
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    AlertDialog alertDialog = builder.create();
    String message = "Certificate error.";
    switch (error.getPrimaryError()) {
        case SslError.SSL_UNTRUSTED:
            message = "The certificate authority is not trusted.";
            break;
        case SslError.SSL_EXPIRED:
            message = "The certificate has expired.";
            break;
        case SslError.SSL_IDMISMATCH:
            message = "The certificate Hostname mismatch.";
            break;
        case SslError.SSL_NOTYETVALID:
            message = "The certificate is not yet valid.";
            break;
    }
    message += " Do you want to continue anyway?";
    alertDialog.setTitle("SSL Certificate Error");
    alertDialog.setMessage(message);
    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Log.d("CHECK", "Button ok pressed");
            // Ignore SSL certificate errors
            handler.proceed();
        }
    });
    alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Log.d("CHECK", "Button cancel pressed");
            handler.cancel();
        }
    });
    alertDialog.show();
    }
});
webView.loadUrl("https://www.google.co.in/");

參考 Android : Workaround for webview not loading https url Android WebView not loading an HTTPS URL How can load https url without use of ssl in android webview

Android安全開發之安全使用HTTPS 這是一篇很好的文章!!! 目前很多應用都用webview載入H5頁面,如果服務端採用的是可信CA頒發的證照,在webView.setWebViewClient(webviewClient)時過載WebViewClient的onReceivedSslError(),如果出現證照錯誤,直接呼叫handler.proceed()會忽略錯誤繼續載入證照有問題的頁面,如果呼叫handler.cancel()可以終止載入證照有問題的頁面,證照出現問題了,可以提示使用者風險,讓使用者選擇載入與否,如果是需要安全級別比較高,可以直接終止頁面載入,提示使用者網路環境有風險:  不建議直接用handler.proceed(),聚安全的應用安全掃描器會掃出來直接呼叫handler.proceed()的情況。 如果webview載入https需要強校驗服務端證照,可以在onPageStarted()中用HttpsURLConnection強校驗證照的方式來校驗服務端證照,如果校驗不通過停止載入網頁。當然這樣會拖慢網頁的載入速度,需要進一步優化,具體優化的辦法不在本次討論範圍,這裡也不詳細講解了。

需要在客戶端中預埋證照檔案,或者將證照硬編碼寫在程式碼中

正確使用HTTPS並非完全能夠防住客戶端的Hook分析修改,要想保證通訊安全,也需要依靠其他方法,比如重要資訊在交給HTTPS傳輸之前進行加密,另外實現客戶端請求的簽名處理,保證客戶端與服務端通訊請求不被偽造

Which versions of WebView are impacted? The impacted versions are 53 and 54 builds of Android WebView. Versions 52 and earlier, or 55 and later, do not exhibit the problem. For affected versions, all channels including stable, beta, dev, canary releases are impacted.

When does the issue start occurring? The issue manifests 10 weeks after the build date. For 53 stable builds, 10 weeks have already passed. For 54, builds will expire as follows:

Build ID Expiration Date 54.0.2840.68 12/27/2016 54.0.2840.85 1/7/2017

WebView FAQ for Symantec Certificate Transparency Issue

#####307 Nautilus not opening up, showing GLib error


(nautilus:12837): GLib-GIO-CRITICAL **: g_dbus_interface_skeleton_unexport: assertion 'interface_->priv->connections != NULL' failed

(nautilus:12837): GLib-GIO-CRITICAL **: g_dbus_interface_skeleton_unexport: assertion 'interface_->priv->connections != NULL' failed
無法註冊應用程式: 已到超時限制

(nautilus:12837): Gtk-CRITICAL **: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

(nautilus:12837): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(nautilus:12837): GLib-GObject-CRITICAL **: g_signal_connect_object: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed


解決方案:

To be able to restart nautilus properly, do the following:

See what nautilus processes are running :
ps aux | grep nautilus
Kill all nautilus processes you see :
sudo kill PIDNUMBER
Restart nautilus :
nautilus -q

參考Nautilus not opening up, showing GLib error

#####308 javaWeb中URLEncoder.encode空格問題

java中URLEncoder.encode之前進行替換:

 //解決urlecode空格問題

message=message.replaceAll(" ", "%20");

event.setField("msg", URLEncoder.encode(message,"UTF-8"));

參考javaWeb中URLEncoder.encode空格問題

309 Using node.js as a simple web server
You can use Connect and ServeStatic with Node.js for this:

1. Install connect and serve-static with NPM
$ npm install connect serve-static
2. Create server.js file with this content:
var connect = require('connect');
var serveStatic = require('serve-static');
connect().use(serveStatic(__dirname)).listen(8080, function(){
    console.log('Server running on 8080...');
});
3. Run with Node.js
$ node server.js
You can now go to http://localhost:8080/yourfile.html

Using node.js as a simple web server

310 when user androidstudio look at source of androidsdk ,Sources for Android API xx Platform not found (Android Studio xx)
  1. download API xx SDK
  2. reboot as
  3. if still cannot look ,find this file ~/.AndroidStudio2.3/config/options and
diff --git a/options/jdk.table.xml b/options/jdk.table.xml
index 0112b91..33828b8 100644
--- a/options/jdk.table.xml
+++ b/options/jdk.table.xml
@@ -76,7 +76,7 @@
         </javadocPath>
         <sourcePath>
           <root type="composite">
-            <root type="simple" url="file:///Applications/Android Studio.app/sdk/sources/android-19" />
+            <root type="simple" url="file:///Users/tehdawgz/dev/android-sdk/sources/android-19" />
           </root>
         </sourcePath>
       </roots>

相關文章