android 对象类型判断为空,Android开发 常见问题

一.集合赋值问题

一般我们从服务器请求到集合时一般赋值这样,然后将数据展示到相应的控件上。

ArrayList mDataList = new ArrayList();

public void getRespon(ArrayList mServiceDataList) {

mDataList = mServiceDataList;

}

这样直接操作数据源,会导致当我们把mDataList集合清空的时候数据源mServiceDataList也同时清空,破坏了源数据,因为两个指向的是一个地址。因此不应该直接操作数据源。

ArrayList mDataList = new ArrayList();

public void getRespon(ArrayList mServiceDataList) {

//1.清空下集合

mDataList.clear();

//2.添加集合

if (mServiceDataList != null) {

mDataList.addAll(mServiceDataList);

}

}

为了避免产生莫名其妙的问题,因此尽量不要破坏传过来的数据。

二.switch 不止可以判断 int

从 Java JDK 1.7 开始,switch 语句就可以开始支持判断 string 对象 和 enum 枚举

public void localEquals(String testString) {

switch (testString) {

case "测试一":

break;

case "测试二":

break;

case "测试三":

break;

}

}

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

string 中 equals方法可以比较两个内容是否相等

public void testEquals(String testString){

"hello".equals(testString);

}

如果testString 写在前面

public void testEquals(String testString){

if(testString!=null){

testString.equals("hello");

}

}

第一个方法不用非空判断,而且testString可以为空值。

四. 被 final 修饰的对象不能被修改

我们常常误以为,被 final 修饰对象不能被修改,其实这种说法不是完全正确的。修改这个对象的成员变量是没有任何问题的

public void testFinal() {

final ReportAllBean mReportAllBean=new ReportAllBean();

mReportAllBean.data="测试修改";

}

但是不能对这个对象进行重新赋值

1dee011a5083?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

五.Java 子父类相互转换

子类转父类

public void testView() {

TextView mTextView = new TextView(mActivity);

View mTextView1 = mTextView;

mTextView1.setVisibility(View.VISIBLE);

}

TextView可以转成父类。并且调用setVisibility方法

父类转子类

public void testView() {

View mView = new View(mActivity);

TextView mTextView = (TextView) mView;

}

运行报ClassCastException

但是findViewById好像返回的就是一个View并且可以转换成子类类型

public void testView() {

View viewById = mActivity.findViewById(R.id.viewPager);

ViewPager mViewPager = (ViewPager) viewById;

}

虽然 findViewById 可以强转成 View 的子类,但是本质获取到的还是 XML 中的那个类型 View,XML 中是 ViewPager,findViewById 获取到也只能是 ViewPager,如果强转成 其他类型 一定会报类型转换异常

父类是可以转成子类的,但是有一个前提条件,那就是它本质上就是这个子类的对象

六.基本数据类型和对象

1dee011a5083?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

基本数据类型和对象之间有很大的区别,基本数据类型只能是一个数值,而对象可以有变量和方法,int 的默认值为0,而 Integer 的默认值为 null,因为它们本身就是两种不同的东西

六.重写和重载

重写:重写父类的方法

@Override

public void onPause() {

super.onPause();

}

重载:一个类里可以有相同方法名的方法,但是参数不同。

public void testView() {

}

public void testView(int i) {

}

七.ListView 或 RecyclerView 使用 Glide

错误写法

Context context = MainActivity.this;

Glide.with(context)

.load(url)

.into(imageView);

正确写法

Glide.with(imageView.getContext())

.load(url)

.into(imageView);

Glide 使用的上下文建议用 ImageView.getContext() 的,来源于我曾经遇到过的问题,在 RecyclerView 中 itemView 中包含一个 ImageView 对象,用于加载后台的用户头像 URL,但是随着列表的滚动,ImageView 加载的图片会混乱起来,原因是 Glide 持有 Activity 的上下文,只要 Activity 没有 finish,Glide 就不会停止本次读取和加载,如果使用了 ImageView 的上下文,只要 ImageView 不可见就会停止加载

此篇文章来源于玉刚文章《那些年,那些坑》,再加一部分自己遇到的坑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值