android 4.1中有应用报出:
java.lang.NullPointerException
at android.widget.TextView.sendBeforeTextChanged(TextView.java:7044)
而往下的log信息都没有应用相关的信息,只知道被它搞死的应用是哪个。后发现该应用中有这么一行代码:
searchEdit.addTextChangedListener(null);
下面说明为什么这么一行会把应用搞死。
TextView.java中的如下函数:
public void addTextChangedListener(TextWatcher watcher) {
if(mListeners == null) {
mListeners = new ArrayList<TextWatcher >();
}
mListeners.add(watcher);
}
private void sendBeforeTextChanged(CharSequence text, int start, int before, int after) {
if(mListeners != null) {
final ArrayList<TextWatcher> list = mListeners;
final int count = list.size();
for(int i = 0; i < count; i++) {
list.get(i).beforeTextChanged(text, start, before, after);
}
}
....
}
上面 list.get(i).beforeTextChanged这行之所以会报空指针,是因为虽然做了list非空的判断,也在for循环了限制了i的大小,但这并不能说明list.get(i) != null.
做个了试验:
ArrayList<String> list = new ArrayList<String>();
list.add(null);
System.out.println("list.size()="+list.size());
System.out.println("list.get(0)="+list.get(0));
输出结果如下:
list.size()=1
list.get(0)=null
以后的警示:
1. 尽量不执行list.add(null);
2. 在list的循环时,要对取出来的元素再做非空判断。
分享到:
相关推荐
list_del函数将一个节点从链表中删除,并将其next和prev指针设置为NULL。 5. 链表的遍历 链表的遍历可以通过list_for_each宏来实现。list_for_each宏是一个foreach循环,用于遍历链表中的每个节点。 6. 链表的...
list.Add(new StepEntity("1", "", 1, "步骤1", eumStepState.Completed, null)); list.Add(new StepEntity("2", "", 2, "步骤2", eumStepState.Completed, null)); list.Add(new StepEntity("3", "", 3, "步骤...
一、List对象中的T是值类型的情况(int 类型等) 对于值类型的List直接用以下方法就可以复制: List<T> oldList = new List(); oldList.Add(..); List<T> newList = new List(oldList); 二、List对象中的T是引用...
if (list == null || list.size() == 0) { return Collections.emptyList(); } //业务处理 return list; } 5. 二分查找:Collections.binarySearch() 方法提供了二分查找功能。 例如: List list = new ...
private List<DetailEntity> list = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listInit(); } public void ...
list.add(user); } } catch (Exception e) { e.printStackTrace(); }finally{ closeAll(rs, pstmt, conn); }return list; } //分页查询用户 public List<User> getUsersByPager(Pager pager,...
listValues.add((tm.getDeviceSoftwareVersion()==null?tm.getDeviceSoftwareVersion():"未知")); //获取软件版本 listValues.add(tm.getNetworkOperator());//获取网络运营商代号 listValues.add(tm....
这意味着在多线程环境中,如果不采取同步措施,使用ArrayList可能会遇到数据不一致的问题。 在实际使用中,我们可以通过以下代码示例了解ArrayList的基本操作: ```java import java.util.ArrayList; public ...
- **数组长度**:当使用`new String[list.size()]`创建数组时,确保列表中的元素数量与数组长度一致,避免出现数组越界的问题。 - **性能考虑**:在转换过程中,尽量减少不必要的对象创建,尤其是当列表很大时,这...
在Java编程语言中,集合框架是处理对象的重要工具,其中包括Set、List和Map三大接口。这些接口提供了多种数据结构和操作方法,使得开发者能够高效地组织和管理数据。 1. **Set接口**: Set接口表示一个不包含重复...
list.add("1"); list.add("2"); // 获取 List 大小并创建一个 String 类型的数组 final int size = list.size(); String[] arr = (String[]) list.toArray(new String[size]); ``` 这里的关键点在于 `list.toArray...
list.Add(item); } return list; } ``` 这个方法通过反射获取T类型中与DataTable列名匹配的属性,并将数据赋值给新创建的对象。完成后,该对象被添加到List中。逆向转换,即从List到DataTable,可以类似地实现,...
list.add(getLayoutInflater().inflate(R.layout.guide_page1, null)); list.add(getLayoutInflater().inflate(R.layout.guide_page2, null)); list.add(getLayoutInflater().inflate(R.layout.
= null) q.add(node.left); if (node.right != null) q.add(node.right); } int[] res = new int[list.size()]; for (int i = 0; i < res.length; i++) res[i] = list.get(i); return res; } ``` 2. **分层...
- 使用 `Iterator` 迭代列表并移除元素比直接在 `for` 循环中移除更安全,因为后者可能导致并发修改异常。 3. **移除列表中的元素:** - 在遍历过程中通过 `Iterator` 的 `remove` 方法移除满足条件的元素。 **...
4. **重复步骤2和3**:由于合并操作可能导致新的集合间出现交集,因此需要重复进行步骤2和3直到列表中的所有集合之间不再存在交集为止。 #### 算法复杂度分析 - **时间复杂度**:主要消耗在于双重循环遍历列表中的...
在并发环境中,多个线程同时访问和修改`null`引用可能导致不确定的行为。确保在并发操作中正确同步和管理`null`引用。 了解并熟练应用这些知识点能显著提高Java代码的健壮性和可靠性,避免因`null`引起的运行时...
例如,对于单链表的实现,`JAVALIST.java`可能包含以下代码片段: ```java public class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } public class ...
List list = new List("列表示例", Choice.IMPLICIT, items, null); ``` 5. 设置List的Command事件处理: ```java list.addCommand(command); list.setCommandListener(new CommandListener() { public void ...
.add(Restrictions.isNull("age")) .add(Restrictions.eq("age", new Integer(0))) .add(Restrictions.eq("age", new Integer(1))) .add(Restrictions.eq("age", new Integer(2))) ) .list(); ``` #### 三、...