Android開(kāi)發(fā) 常見(jiàn)問(wèn)題

一.集合賦值問(wèn)題

一般我們從服務(wù)器請(qǐng)求到集合時(shí)一般賦值這樣,然后將數(shù)據(jù)展示到相應(yīng)的控件上。

ArrayList<String> mDataList = new ArrayList<String>();

    public void getRespon(ArrayList<String> mServiceDataList) {
        mDataList = mServiceDataList;

    }

這樣直接操作數(shù)據(jù)源,會(huì)導(dǎo)致當(dāng)我們把mDataList集合清空的時(shí)候數(shù)據(jù)源mServiceDataList也同時(shí)清空,破壞了源數(shù)據(jù),因?yàn)閮蓚€(gè)指向的是一個(gè)地址。因此不應(yīng)該直接操作數(shù)據(jù)源。

 ArrayList<String> mDataList = new ArrayList<String>();

    public void getRespon(ArrayList<String> mServiceDataList) {
        //1.清空下集合
        mDataList.clear();
        //2.添加集合
        if (mServiceDataList != null) {
            mDataList.addAll(mServiceDataList);
        }
    }

為了避免產(chǎn)生莫名其妙的問(wèn)題,因此盡量不要破壞傳過(guò)來(lái)的數(shù)據(jù)。

二.switch 不止可以判斷 int

從 Java JDK 1.7 開(kāi)始,switch 語(yǔ)句就可以開(kāi)始支持判斷 string 對(duì)象 和 enum 枚舉

 public void localEquals(String testString) {
        switch (testString) {
            case "測(cè)試一":
                break;
            case "測(cè)試二":
                break;
            case "測(cè)試三":
                break;
        }
    }

三. equals方法使用防止空指針

string 中 equals方法可以比較兩個(gè)內(nèi)容是否相等

 public void testEquals(String  testString){
       "hello".equals(testString);
   }

如果testString 寫(xiě)在前面

 public void testEquals(String  testString){
       if(testString!=null){
           testString.equals("hello");
       }
   }

第一個(gè)方法不用非空判斷,而且testString可以為空值。

四. 被 final 修飾的對(duì)象不能被修改

我們常常誤以為,被 final 修飾對(duì)象不能被修改,其實(shí)這種說(shuō)法不是完全正確的。修改這個(gè)對(duì)象的成員變量是沒(méi)有任何問(wèn)題的

 public void testFinal() {
        final ReportAllBean mReportAllBean=new ReportAllBean();
        mReportAllBean.data="測(cè)試修改";
    }

但是不能對(duì)這個(gè)對(duì)象進(jìn)行重新賦值


image.png

五.Java 子父類(lèi)相互轉(zhuǎn)換

子類(lèi)轉(zhuǎn)父類(lèi)
  public void testView() {
        TextView mTextView = new TextView(mActivity);
        View mTextView1 = mTextView;
        mTextView1.setVisibility(View.VISIBLE);

    }

TextView可以轉(zhuǎn)成父類(lèi)。并且調(diào)用setVisibility方法

父類(lèi)轉(zhuǎn)子類(lèi)
 public void testView() {
        View mView = new View(mActivity);
        TextView mTextView = (TextView) mView;

    }

運(yùn)行報(bào)ClassCastException
但是findViewById好像返回的就是一個(gè)View并且可以轉(zhuǎn)換成子類(lèi)類(lèi)型

public void testView() {
        View viewById = mActivity.findViewById(R.id.viewPager);
        ViewPager mViewPager = (ViewPager) viewById;
    }

雖然 findViewById 可以強(qiáng)轉(zhuǎn)成 View 的子類(lèi),但是本質(zhì)獲取到的還是 XML 中的那個(gè)類(lèi)型 View,XML 中是 ViewPager,findViewById 獲取到也只能是 ViewPager,如果強(qiáng)轉(zhuǎn)成 其他類(lèi)型 一定會(huì)報(bào)類(lèi)型轉(zhuǎn)換異常

父類(lèi)是可以轉(zhuǎn)成子類(lèi)的,但是有一個(gè)前提條件,那就是它本質(zhì)上就是這個(gè)子類(lèi)的對(duì)象

六.基本數(shù)據(jù)類(lèi)型和對(duì)象

image.png

基本數(shù)據(jù)類(lèi)型和對(duì)象之間有很大的區(qū)別,基本數(shù)據(jù)類(lèi)型只能是一個(gè)數(shù)值,而對(duì)象可以有變量和方法,int 的默認(rèn)值為0,而 Integer 的默認(rèn)值為 null,因?yàn)樗鼈儽旧砭褪莾煞N不同的東西

六.重寫(xiě)和重載

重寫(xiě):重寫(xiě)父類(lèi)的方法

 @Override
    public void onPause() {
        super.onPause();
    }

重載:一個(gè)類(lèi)里可以有相同方法名的方法,但是參數(shù)不同。

 public void testView() {

    }
 public void  testView(int i) {
    }

七.ListView 或 RecyclerView 使用 Glide

錯(cuò)誤寫(xiě)法

Context context = MainActivity.this;

Glide.with(context)
        .load(url)
        .into(imageView);

正確寫(xiě)法

Glide.with(imageView.getContext())
        .load(url)
        .into(imageView);

Glide 使用的上下文建議用 ImageView.getContext() 的,來(lái)源于我曾經(jīng)遇到過(guò)的問(wèn)題,在 RecyclerView 中 itemView 中包含一個(gè) ImageView 對(duì)象,用于加載后臺(tái)的用戶(hù)頭像 URL,但是隨著列表的滾動(dòng),ImageView 加載的圖片會(huì)混亂起來(lái),原因是 Glide 持有 Activity 的上下文,只要 Activity 沒(méi)有 finish,Glide 就不會(huì)停止本次讀取和加載,如果使用了 ImageView 的上下文,只要 ImageView 不可見(jiàn)就會(huì)停止加載

此篇文章來(lái)源于玉剛文章《那些年,那些坑》,再加一部分自己遇到的坑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • USB模式打開(kāi) 小米3: 開(kāi)發(fā)常見(jiàn)問(wèn)題: Activity全屏,軟鍵盤(pán)擋住輸入框問(wèn)題的終極解決方案: EditTe...
    慢牛策略閱讀 465評(píng)論 0 0
  • 1,使用DBMS導(dǎo)入文件時(shí)候出現(xiàn)如下提示: [2016-08-30 10:28:35 - ddms] transf...
    拜雨LeoLiu閱讀 205評(píng)論 0 0
  • 去年今日此門(mén)中,人面桃花相映紅。人面不知何處去,桃花依舊笑春風(fēng)。
    獨(dú)沽酒濺閱讀 190評(píng)論 0 0
  • 《無(wú)問(wèn)西東》 如果有機(jī)會(huì)提前了解你的人生,知道青春也不過(guò)只有這些日子, 不知是否你還會(huì)在意那些世俗要你們?cè)谝獾氖虑?..
    張雅梅May閱讀 177評(píng)論 0 0

友情鏈接更多精彩內(nèi)容