1. 程式人生 > >一些遇到的錯誤的整理

一些遇到的錯誤的整理

1.直接閃退,報型別轉換錯誤,檢查很多遍,無果,最後發現,是因為採用了多個佈局適配,也就是layout-sw600dp和layout資料夾下有一個相同命名的佈局檔案,後來因為需求變化,更改了其中一個佈局檔案的控制元件型別,另一個忘了改,編譯沒有報錯,執行時報錯
2.startActivity啟動一個新Activity後onActivityResult不被呼叫,但是有時候又會被呼叫,找了很久,發現是因為使用了TabHostActivity,TabHostActivity子activity,有時候就不會呼叫一些生命週期,後來子activity中使用
getParent().startActivityForResult(new
Intent(this,要跳轉的Activity.class), 請求碼)
然後TabHostActivity中的onActivityResult去呼叫當前子activity的onActivityResult方法,就可以實現了,
Activity currentActivity = getCurrentActivity();
        if (currentActivity instanceof TestActivity) {
            ((TestActivity) currentActivity).onActivityResultL(requestCode,
                    resultCode, data
);
}
    最後補充一點,還是不要使用TabHostActivity了,這個方法已經被google標註為過時了,會有各種小問題的,我遇到的應該就是其中的某一個問題。推薦使用FragmentActivity去載入多個fragment
3.TabActivity彈出視窗後返回,子activity中的EditText只能輸入,不能刪除(退格)了,找了很久,在TabActivity中的dispatchKeyEvent方法中列印捕捉到的key的值,發現是可以的,但是子activity就捕捉不到,說明tabActivity搶佔了子activity的焦點,怎麼辦呢,還是2的辦法,呼叫一下子類的同樣的方法,
if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
            return true;
        }
        Activity currentActivity = getCurrentActivity();
        if (currentActivity instanceof TestActivity) {
            return ((TestActivity) currentActivity).dispatchKeyEvent(event);
        }else if(currentActivity instanceof ParameterSettingActivity){
            return ((ParameterSettingActivity) currentActivity).dispatchKeyEvent(event);
        }else if(currentActivity instanceof ScalingActivity){
            return ((ScalingActivity) currentActivity).dispatchKeyEvent(event);
        }else if(currentActivity instanceof QualityControlActivity){
            return ((QualityControlActivity) currentActivity).dispatchKeyEvent(event);
        }
        return super.dispatchKeyEvent(event);
這樣,就解決了,再次強調一下,不要用打了棄用符號的方法,會有各種問題的,我這個是專案完結了,改起來比較麻煩,就這麼修復bug了

4.使用開源專案EventBus報錯No subscribers registered for event class java.lang.Integer,說我沒有引數為Integer型別的方法。
錯誤原因:我使用的是onEventMainThread(int value);
解決辦法:改為onEventMainThread(Integer value);

將.9圖片放入到android studio會報錯,錯誤原因有兩個,1.是直接從外部複製,貼上到android studio中的,我開啟實際的資料夾,是沒有這個檔案的,2.android studio不支援.9.png或.9.jpg的寫法,直接寫.png不要帶.9會自動識別

activity載入v4包中的fragment會報錯,不要基層activty,繼承FragmentActivity就可以了,原因: 編譯系統會把<fragment>認為是app包中的Fragment來處理。但是此時我們匯入的是v4包中的Fragment,所以會報錯

使用BitmapFactory.decodeResource(getResources(), 資源ID)的時候,得到的確是一個空的BitMap,因為我載入的是xml格式的shape圖片,該方法不支援

在fragment中得到佈局的寬高,返回的確是0,甚至在onResume中也是得到的為0,最後找到一個辦法,在Activity的onWindowFocusChanged(boolean hasFocus)中呼叫fragment中的方法來得到佈局寬高資訊,http://blog.csdn.net/pi9nc/article/details/9237031可以知道onWindowFocusChanged的作用,這裡不作多解釋

使用FragmentStatePagerAdapter後,預設的只能快取三個頁面,我要快取多個頁面,fragmentPager.setOffscreenPageLimit(XXXX);在繫結adapter時設定快取的頁面個數。

讀寫sd卡的時候不成功,許可權也加了,就是沒有效果,最後才發現自己把androidManifest中的許可權程式碼小寫了,小寫了無效。

Layout.getDesiredWidth(“字”,畫筆),自定義View中常用的,得到字所佔的x軸的畫素 ,浮點數,可以通過FloatMath.ceil()方法向上取整,如果畫筆強轉textPaint畫筆失敗的話,可以用另外一個辦法 float textWidth = paint.measureText(“-“);

關於adapter.notifyDataSetChanged();介面不重新整理的問題,首先,我先列印log,確定這個方法被呼叫了,其次,列印list的長度,發現list資料是有改變的,最後原因是因為我的mlist=xxx.get();拿過來的,而xxx.get()方法中每次都會new一個list返回給我的mlist,而介面繫結的mlist實際上是第一個list,第一個list只不過是mlist的一個引用,當mlist指向下一個list的時候,雖然mList的資料已經改變了,但是介面繫結的還是mlist引用的第一個list,所以就認為值沒有發生改變,所以介面也沒變,可以使用方法
list.clear();
list.addAll(DataSupport.where(whereValue).find(ReportBean.class));
這樣介面就會跟著改變了
在dialogFragment的根佈局中設定背景圖片是圓角的,但是顯示上就是有角,問題原因
這裡寫圖片描述
子啊onCrate中替換了style,而style指向的style中設定了背景圖片,所以不管怎麼改都改不了
這裡寫圖片描述

關於android studio中修改應用版本號喝版本名稱後無效的問題,坑爹的studio,竟然把版本號和版本名稱改到build.gradle中了,知道真相的我頓時淚奔,你說你改了位置,到是可以相容一下前面的啊,不相容的話,你到時刪掉啊,容易誤導,排錯好耗時的
這裡寫圖片描述

WARNING: linker: app_ process has text relocations. This is wasting memory and is a security risk. Please fix.

重寫父類View的成員函式onKeyPreIme來處理一個鍵盤事件的時候,如果不希望這個鍵盤事件分發給輸入法處理,那麼就返回一個true值,否則的話,就返回一個false值。

使用android studio1.3.1編寫dataBinding資料繫結的時候,使用的是classpath “com.android.databinding:dataBinder:1.0-rc1”,出現錯誤Error:Failed to resolve: com.android.databinding:library:1.0-rc1
Open File
Show in Project Structure dialog
Error:Failed to resolve: com.android.databinding:adapters:1.0-rc1
Open File
Show in Project Structure dialog
這裡寫圖片描述
解決辦法:更新SDK的Extras下的Android Support Repository和Android Support Library包,更新後就可以在sdk/extras/android/m2repository/com/android/databinding的資料夾中的adapter和library資料夾中發現1.0-rc1的身影了

android stuido使用遠端依賴時,一直停留在下載的解決辦法
在gradle裡最外層加上

allprojects {  
    repositories {  
        mavenCentral()  
    }  
}  

就是設定一下遠端倉庫使用mavenCentral…然後Sync project with gradle files一下,就開始下載了,Btw,mavenCentral不需要翻牆。如果jar包在別的倉庫,比如jcenter,那就在裡面再加個jcenter()就OK啦。

附下載下來的jar包位置,如foldable-layout-1.0.1-sources.jar:

C:\Users\使用者.gradle\caches\modules-2\files-2.1\com.alexvasilkov\foldable-layout\1.0.1\59a9dd35f8d31de01991ee56b741e9e992914895\foldable-layout-1.0.1-sources.jar
這個部落格裡看到的

提問過windous10打不出字,通過安裝第三方輸入法和所有有關切換的快捷鍵都沒用,現在找到了解決方法
win鍵+x,開啟命令提示符,輸入ctfmin,回車