2016-12-28 62 views
0

stacktrack:的Java空指针异常,但已经初始化

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean' java.util.ArrayList.add(java.lang.Object)' on a null object reference 
at android.net.LinkProperties.<init>(LinkProperties.java:159) 
at com.android.server.ConnectivityService.getUnfilteredActiveNetworkState(ConnectivityService.java:957) 
at com.android.server.ConnectivityService.getActiveNetworkInfo(ConnectivityService.java:1024) 
at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:696) 
at 

linkproperties.java:

public final class LinkProperties implements Parcelable { 
// The interface described by the network link. 
private String mIfaceName; 
private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<LinkAddress>(); 
private ArrayList<InetAddress> mDnses = new ArrayList<InetAddress>(); 
private String mDomains; 
private ArrayList<RouteInfo> mRoutes = new ArrayList<RouteInfo>(); 
... 
public LinkProperties(LinkProperties source) { 
    if (source != null) { 
     mIfaceName = source.getInterfaceName(); 
     for (LinkAddress l : source.getLinkAddresses()) mLinkAddresses.add(l); 
     for (InetAddress i : source.getDnsServers()) mDnses.add(i); 
     mDomains = source.getDomains(); 
     for (RouteInfo r : source.getRoutes()) mRoutes.add(r); 
     mHttpProxy = (source.getHttpProxy() == null) ? 
       null : new ProxyInfo(source.getHttpProxy()); 
     for (LinkProperties l: source.mStackedLinks.values()) { 
      addStackedLink(l); 
     } 
     setMtu(source.getMtu()); 
     mTcpBufferSizes = source.mTcpBufferSizes; 
    } 
} 

在堆栈跟踪,我们可以找到这个例外在init方法中发生的事情,这意味着当这个结构数据,而在做ArrayList.add方法时,抛出一个NullPointerException。所以在构造方法中,只有mLinkAddresses,mDnsesMRoutes这三个ArrayLists,但它们都已经被初始化。所以我对此感到困惑。

所有Arraylist在创建之前都已经初始化,但仍然得到NullPointerException,而这个问题只发生在MTK平台上。

+0

这是行159? – ItamarG3

+0

是的,这是行159.此外,你确定你已经清理并重建你的项目,所以这是实际运行的代码?最后,你是否尝试过将'ArrayList'字段的初始化移入构造函数本身? –

+0

@Ted Hopp我可以确定ArrayLists只有这三个字段的构造方法。所有这些都已经初始化。这个代码是AOSP,你们可以看看这个http://androidxref.com/7.1.1_r6/xref/frameworks/base/core/java/android/net/LinkProperties.java –

回答

0

方法参数LinkProperties source不为空,但是当调用source.getLinkAddresses(),source.getDnsServers(),source.getRoutes()可能具有空值时。您必须检查它。

+0

如果这是问题,则错误消息和堆栈跟踪将完全不同。 –