⑴ android開發常見異常與錯誤系列(一)
一、前言
這系列文章是自己在平時開發過程中遇到的問題。之前只是記在雲筆記上面,現在整理一下,發出來共享。
ps:像那些什麼沒有注冊Activity呀,許可權呀等最基本的就不再贅述。
二、ADB連接異常
有時我們發現,即使自己從任務管理器裡面把adb.exe給幹掉了,但還是不行,這時,你就可以嘗試以下操作:
[2014-07-30 17:09:11 - QtActivity] The connection to adb is down, and a severe error has occured.
[2014-07-30 17:09:11 - QtActivity] You must restart adb and Eclipse.
[2014-07-30 17:09:11 - QtActivity] Please ensure that adb is correctly located at 『D:\InstallFile\AndroidDevelop\ADT\sdk\platform-tools\adb.exe』 and can be executed.
adb起動失敗:
1,殺掉其它的adb.exe看,如果不行,
2,看sdk\tools路徑下面有沒有
hprof-conv.exe
如果有,則把它復制到sdk\platform_tools下
3,如果沒有,剛看sdk\platform_tools下有沒有
hprof-conv.exe
如果有,剛復制到tools下。
4,如果兩者都沒有,剛下一個
hprof-conv.exe
三、java.lang.IllegalStateException: Activity has been destroyed
這個異常在切換Fragment中比較容易出現,稍不注意就會出現如下異常:
FATAL EXCEPTION: main12-0909:20:14.689: E/AndroidRuntime(31223): java.lang.IllegalStateException: Activity has been destroyed12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.init(DongTaiFragment.java:209)12-0909:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.onCreateView(DongTaiFragment.java:68)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)12-0909:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.handleCallback(Handler.java:605)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.dispatchMessage(Handler.java:92)12-0909:20:14.689: E/AndroidRuntime(31223): at android.os.Looper.loop(Looper.java:154)12-0909:20:14.689: E/AndroidRuntime(31223): at android.app.ActivityThread.main(ActivityThread.java:4624)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invokeNative(Native Method)12-0909:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invoke(Method.java:511)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)12-0909:20:14.689: E/AndroidRuntime(31223): atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)12-0909:20:14.689: E/AndroidRuntime(31223): at dalvik.system.NativeStart.main(Native Method)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
經查,說這個是當前android-support-v4版本的一個bug,因為在當fragment進行到detached狀態時,它會重置它的內部狀態。
然而,它並沒有重置mChildFragmentManager.這導致在Fragment重新attach時,它(fragment)沒有重新attachm childFragmentManager,從而引發了上面的異常.
解決方案:
在每個調用getChildFragmentManager()的fragment中復寫onDetach()方法:
@OverridepublicvoidonDetach() {super.onDetach();try{Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");childFragmentManager.setAccessible(true);childFragmentManager.set(this,null);}catch(NoSuchFieldException e) {thrownewRuntimeException(e);}catch(IllegalAccessException e) {thrownewRuntimeException(e);}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
四、java.lang.IllegalArgumentException: Illegal character in query at index
這個異常,在我們拼接請求參數時,可能會碰到,原因是裡面的特殊字元轉換異常。解決辦法如下:
url轉換問題
String url = baseUrl + 「?」 + 「name=」 + name + 「&age=」 + age;
url = url.replaceAll(「&」, 「%26」);
url = url.replaceAll(」 「, 「%20」);
解釋如下:
特殊符號替換符號
?%3F
&%26
|%124
=%3D
#%23
/%2F
+%2B
%%25
空格%20
五、eclipse連接小米2S調試程序的問題
雖然快2年沒用過eclipse了,但這個問題還是貼出來,也許正好有正在用eclipse的同學遇到了此問題:
小米Mi2S連接到eclipse上無法識別。即使開啟了調試模式,也無法識別.終於找到了一個可用的方法。
方法
用數據線連接手機和電腦。
打開手機撥號界面。
在撥號界面按 # #717717# # 自動就開啟了。
在通知欄會出現一個 Diag USB port enable。
當然,應該是需要ROOT許可權的。
這時候你的PC機會彈出安裝設備驅動。
如果不成功,多插拔幾次試試。
ok!安裝完就搞定了!這時候打開eclipse就會在Driver裡面看到你的手機了。
注意事項
在PC機上安裝新硬體向導時候可能會遭遇到缺少dll文件,比如我就遇到缺少了WinUSBCoInstaller2.dll,這個問題。這時候就要去網上找找嘍。這個東西分x64 和 x86的,注意不要搞錯了!
如果先打開eclipse,再安裝的話,可能導致eclipse掛掉,不明原因,可能是我機器配置不行。兩次均有這種狀況。所以建議先安裝後再開eclipse。
⑵ Android編程出現錯誤:cannot be resolved or is not a field
首先檢查你的XML是否保存了,再檢查你的import導入的R文件是你包名+R還是android.R