不懂这个空指针异常怎么解决是怎么发生的,求解

你的位置: >
> 断点调试空指针【原创】
安卓程序中,遇到最多报错,其中一种空指针问题,空指针说起来:好解决! 也不好解决.
好解决的是说:明显的空指针问题,没有实例化类,控件或者id 找错的。都会出现空指针问题。
不好解决的空指针是:通常是这种情况,在一个请求里面,又写了一个网络请求。就相当于在一个线程里面又开了一个线程。因为我们不能确定第一个线程是否执行完毕了,或者说执行了一半的时候,不能确保线程执行完毕的情况。当然这种情况不一定就是网络请求才会出现。也有可能是执行了非常耗时的工作。所以,不推荐在一个线程中,又开启另一个耗时的线程。如果遇到特殊情况,非要开启一个线程的,请确保两个线程都能执行完毕。
遇到空指针的问题,如何解决才是最关键的: 通常我们发现空指针的问题的是,程序崩溃停止运行,通过log 日志打印,我们可以从控制台中,直接定位到某一行,那说明就是这一行报了空指针的问题。因为是一行代码 :实例如下:
doSetLocation(res_city_id,latitude,lontitude);
像上面的这行代码,一共传了三个参数,既然这行报了空指针,一定有的参数值是空的,没有获取到值,或者说没有赋值成功。解决方法是:首先你可以自己确定有哪些参数是一定不为空的,有哪些是可能为空的。至于怎么看,要根据实际情况来看,也可以凭借经验,哪一个可能为空。
当我们不确定哪一个参数为空的时候,就需要手动调试,而断点调试则是我们调试手段最常用,并且是最有效的一个手段。它可以帮你定位到每一个参数的传值情况,这样就能一步一步找出问题所在。
还有一种情况是,断点也找不到的错误。因为断点调试,直接跳出方法,不执行。这个也常见,但是也必须要解决的问题。
之前就遇到了,下面一段代码如下:
private List&NameValuePair&
public JSONParser(Context context,Boolean isLoginOrRegister){
this.isLoginOrRegister=isLoginOrR
this.context=
public String makeHttpRequest2(String url, String method, String jsonStr) {
else if (method == &GET&) {
// request method is GET
String paramString = URLEncodedUtils.format(params, &utf-8&);
url += &?& + paramS
HttpGet httpGet = new HttpGet(url);
} catch (Exception e) {
e.printStackTrace();
使用情况如下,当我走”GET“方法时。直接抛出空指针异常,没有走里面的方法。当我定位报错信息时,显示 params 报空。当时一看到这也是蒙了。因为怕什么来什么,网络请求经常用,但是封装网络请求却是不太了解。因为params为空,就去找 params 在哪里初始化,这时候,会发现。最上面的两个构造方法,
有一个带params的参数的构造方法,一个却是不带params的构造方法。而我使用的恰好是不带params 参数的构造方法。当时我发现没有这个参数,就把参数加上去不就可以了吗,后来发现加上去也是错的。
首先搞清构造方法是什么?构造方法是,构造方法是在你调用的时候,他就帮你实例化参数,或者实例化一些需要new 出来的类。
发现了这个,你就会发现第二个构造方法,虽然使用了params 但是却没有实例化。找到问题解决问题就很方便了。只需要在构造方法里面实例化即可。不使用参数方式的实例化。
public JSONParser(Context context,Boolean isLoginOrRegister){
this.isLoginOrRegister=isLoginOrR
this.context=
params=new ArrayList&NameValuePair&();
只需 new 出来即可。不需要赋值,但是却实例化了类。这样问题就解决了。
当然遇到空指针的问题,一 看,二 断点,三 排查。 这样基本都能解决。
本文永久地址:/13969.html本文出自
,转载时请注明出处及相应链接。
与本文相关的文章spring注入,空指针错误,看了好多帖子忍找不到办法,求大神指点_读书人
spring注入,空指针错误,看了好多帖子忍找不到办法,求大神指点
&来源:读书人网&【读书人网():综合教育门户网站】
spring注入,空指针异常,看了好多帖子忍找不到办法,求大神指点以下是我自己做的例子:使用全注解的形式DAO层
spring注入,空指针异常,看了好多帖子忍找不到办法,求大神指点以下是我自己做的例子:使用全注解的形式DAO层:package&Impl.DAOIimport&javax.annotation.Rimport&org.springframework.stereotype.Rimport&DAO.RegionDAO;import&Entity.R@Repository(value="regionDAOimpl")public&class&RegionDAOImpl&implements&RegionDAO&{@Resourceprivate&RegionDAO&public&RegionDAO&getRegionmapper()&{return&}/*public&void&setRegionmapper(RegionDAO&regionmapper)&{this.regionmapper&=&}*/public&Region&selectRegion(int&code)&{return&regionmapper.selectRegion(code);}public&int&updateRegion(int&code)&{return&regionmapper.updateRegion(code);}public&void&deleteRegion(int&code)&{regionmapper.deleteRegion(code);}public&int&insertRegion(Region&region)&{return&regionmapper.insertRegion(region);}public&void&test2()&{System.out.println("test2");}}Service层:package&Impl.ServiceIimport&java.net.URI;import&javax.annotation.Rimport&javax.ws.rs.Cimport&javax.ws.rs.DELETE;import&javax.ws.rs.FormPimport&javax.ws.rs.GET;import&javax.ws.rs.POST;import&javax.ws.rs.PUT;import&javax.ws.rs.Pimport&javax.ws.rs.PathPimport&javax.ws.rs.Pimport&javax.ws.rs.core.Cimport&javax.ws.rs.core.MediaTimport&javax.ws.rs.core.Rimport&javax.ws.rs.core.UriIimport&javax.xml.bind.JAXBEimport&org.springframework.stereotype.Simport&org.springframework.transaction.annotation.Timport&DAO.RegionDAO;import&Entity.Rimport&SERVICE.RegionS@Service@Path("/region")public&class&RegionServiceImpl&implements&RegionService&{@Context&UriInfo&uriI@Resource(name="regionDAOimpl")//不需要set方法了private&RegionDAO&regionDAO/*public&void&setRegionDAOimpl(RegionDAO&regionDAOimpl)&{this.regionDAOimpl&=&regionDAO}*/public&RegionDAO&getRegionDAOimpl()&{return&this.regionDAO}@Path("/{id}")@GET@Produces(MediaType.APPLICATION_XML)public&Region&findRegion(@PathParam("id")&String&id)&{System.out.println("10");int&code&=&Integer.valueOf(id);System.out.println(regionDAOimpl&==&null);return&this.regionDAOimpl.selectRegion(code);}@PUT@Produces("text/xml")@Consumes(MediaType.APPLICATION_XML)@Transactionalpublic&int&update(JAXBElement&Region&&jaxbRegion)&{Region&region&=&jaxbRegion.getValue();int&id&=&region.getCode();return&this.regionDAOimpl.updateRegion(id);}@Path("/{id}")//子资源方法@Transactional@DELETE@Consumes("text/xml")public&void&delete(@PathParam("id")int&id)&{this.regionDAOimpl.deleteRegion(id);}@Transactional@POST@Produces("text/xml")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)//接受表单输入public&int&insert(@FormParam("code")&String&code,&@FormParam("name")&String&name)&{Region&region&=&new&Region();int&id&=&Integer.valueOf(code);region.setCode(id);region.setName(name);URI&uri&=&uriInfo.getAbsolutePathBuilder().path(code).build();Response.created(uri).build();return&this.regionDAOimpl.insertRegion(region);}public&void&test()&{System.out.println("ok");}}applicationContext.xml配置:&?xml&version="1.0"&encoding="UTF-8"?&&beans&xmlns="http://www.springframework.org/schema/beans"&&&&xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&&&&xmlns:aop="http://www.springframework.org/schema/aop"&&&&xmlns:tx="http://www.springframework.org/schema/tx"&&&&xmlns:context="http://www.springframework.org/schema/context"xmlns:mybatis="http://www.mybatis.org/schema/mybatis"&&&&xsi:schemaLocation="http://www.springframework.org/schema/beans&&&&&&http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&&&&&http://www.springframework.org/schema/context&&&&&&http://www.springframework.org/schema/context/spring-context-3.0.xsd&&&&&&http://www.mybatis.org/schema/mybatis&&&&&&http://www.mybatis.org/schema/mybatis/mybatis-spring.xsd&&&&&&http://www.springframework.org/schema/mvc&&&&&&http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&&&&http://www.springframework.org/schema/tx&&&&http://www.springframework.org/schema/tx/spring-tx.xsd"&&&&&default-autowire="byName"&&&!--&default-autowire="byName"&&--&
&&&&&&context:annotation-config&/&&&&&&&context:component-scan&base-package="Impl"&/&&&&&&&&&&&&context:property-placeholder&location="classpath:postgre.properties"&/&&&&&&&&&&&&bean&id="dataSource"&class="org.springframework.jdbc.datasource.DriverManagerDataSource"&&&&&&&&&&&&&&&&property&name="driverClassName"&value="${jdbc.driverClassName}"&/&&&&&&&&property&name="url"&value="${jdbc.url}"&/&&&&&&&&&/bean&&bean&id="transactionManager"&class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&&property&name="dataSource"&ref="dataSource"&&/&&/bean&&tx:annotation-driven&transaction-manager="transactionManager"&proxy-target-class="true"&/&&&&&&&&&&&bean&id="sqlSessionFactory"&class="org.mybatis.spring.SqlSessionFactoryBean"&&&&&&&&&&property&name="dataSource"&ref="dataSource"&/&&&&&&&&&&&&property&name="mapperLocations"&value="classpath:mapper/*.xml"&/&&/bean&&&bean&id="regionmapper"&class="org.mybatis.spring.mapper.MapperFactoryBean"&&&&&&&property&name="sqlSessionFactory"&ref="sqlSessionFactory"/&&&&&&&property&name="mapperInterface"&value="DAO.RegionDAO"/&&&&&&/bean&&!--&&bean&id="regionDAOimpl"&class="Impl.DAOImpl.RegionDAOImpl"&&&&&&&property&name="regionmapper"&ref="regionmapper"/&&&&&&/bean&&&&&&&&&&bean&id="regionServiceimpl"&class="Impl.ServiceImpl.RegionServiceImpl"&&&&&&&property&name="regionDAOimpl"&ref="regionDAOimpl"/&&&&&&/bean&&--&&&&&&&&&&&&/beans&web.xml配置:&web-app&&display-name&Archetype&Created&Web&Application&/display-name&&context-param&&&&&&&&&&param-name&contextConfigLocation&/param-name&&&&&&&&&&&&&&&&&&&&&&param-value&/WEB-INF/applicationContext.xml&/param-value&&&&&&/context-param&&&&&&&&&&&&listener&&&&&&&&&&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&&&&&&/listener&&&&&&&&&&servlet&&servlet-name&JerseyRestTest&/servlet-name&&servlet-class&com.sun.jersey.spi.container.servlet.ServletContainer&&/servlet-class&&&init-param&&&param-name&com.sun.jersey.config.property.packages&/param-name&&&param-value&Impl.ServiceImpl&/param-value&&/init-param&&&load-on-startup&1&/load-on-startup&&&/servlet&&servlet-mapping&&&servlet-name&JerseyRestTest&/servlet-name&&&url-pattern&/rest/*&/url-pattern&&/servlet-mapping&&welcome-file-list&&&&&&&&&&welcome-file&index.jsp&/welcome-file&&&&&&/welcome-file-list&&&&/web-app&运行时报空指针异常service里调用dao的方法出现的这个错误,于是我建立test测试:&ApplicationContext&appContext&=&new&&ClassPathXmlApplicationContext("applicationContext.xml");&//System.out.println(appContext.getType("regionServiceimpl"));&RegionServiceImpl&regionService&=&(RegionServiceImpl)appContext&.getBean(RegionServiceImpl.class);&regionService.test();显示正常;看了好多帖子,还是找不到解决问题的办法,求指教!!!!!! [解决办法]你前面的定义:@Repository(value="regionDAOimpl")public&class&RegionDAOImpl&implements&RegionDAO&{
@Resourceprivate&RegionDAO&感觉应该是这个regionmapper的问题。那个测试类调用test方法没用到增删改查,因此没报错。你具体错误日志是啥呢?[解决办法]空指针at&Impl.ServiceImpl.RegionServiceImpl.findRegion(RegionServiceImpl.java:51)RegionServiceImpl&51行都做了什么操作呢?(你的代码没有排版,看不出行数)匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 java空指针异常处理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信