实在是不擅长Android开发,但在努力的学习当中。这篇文章就记录一下学习过程中,自己犯下的一些错误,同时也让自己记住别再犯同样的错误了。各位看官勿见笑!
一个关于空指针的错误
错误类型一:
未对对象进行初始化导致了空指针的错误。类似于如下:
public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i(TAG, "------onActivityCreated------"); //未对db_manager进行初始化,就是下面的new,直接就调用了最后一句 db_manager = new DatabaseManager(context); totalCount = db_manager.getTotalCount();
实在是忘记了对其进行初始化,通过错误寻找,然后找到了原因。解决这个问题的时候,先根据错误提示,找到错误的行,然后根据错误类型预判什么位置出错了,当所有想到的方法都用尽了,才寻找其他人帮助。也许这就是成长之路。
错误类型二:
多个引用变量导致的错误(不知道描述是否正确?望批正),类似如下:
public class NoteFragment extends ListFragment implements OnScrollListener, OnClickListener { public static final String TAG = "NoteFragment"; public Context context; // 存储上下文对象 public Activity activity; private Thread mThread; // 已经定义了一个全局的适配器adapter ----1 private SimpleAdapter adapter; ....... }
public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i(TAG, "------onActivityCreated------"); ...... //此处重复的申明一个adapter,实际应该去掉SimpleAdapter,此类型上当了两次 SimpleAdapter adapter = new SimpleAdapter(getActivity(), listItems, R.layout.note_list_item, new String[] { "tvNoteTitle", "tvNoteContent", "tvNoteCreateTime" }, new int[] { R.id.tvNoteTitle, R.id.tvNoteContent, R.id.tvNoteCreateTime }); setListAdapter(adapter); ......}
现在简单的记录一下这些问题,第一个错误类型比较好理解,第二个暂时还不了解其原理,有空的时候细究一下,然后再补充进来。
问题剖析:
其实,两类型的问题都可以归结为一个类型。为了便已说明,定义一个简单的类:
class Student{ String name = "张三"; int age = "20"; int number = "30"; String address = "广东广州"; }
那在对此类进行使用的时候,通常的做法为:
Student student; // ------1public void getName(){ String name = student.name; // -------2
-------------------------------
Student student = new Student(); //------3 String name = student.name; }
public void getAget(){
int age = student.age; //-----4
}
1是创建了Student类的引用变量,但是2在使用的时候并没有对创建Student类的对象,导致了,在2处为报空指针错误。
4在处也会出现同样的错误。原因是student只在getName()中3处重复创建了Student类的对象,而在getAge中并没有,故导致了4出student为空的引用变量,但没有对应对象。
关于JAVA对象引用,以及对象赋值,请看这里,非常详细,看了这篇文章才了解的犯下的错误的原因。
我在慢慢的找到自己的节奏,2015年,来一个小小的转变,Fighting!