gpt4 book ai didi

java - 从扩展类调用方法时访问资源出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 12:39:50 24 4
gpt4 key购买 nike

我有一个从 ListActivity 扩展而来的 Activity 类 ClassA,它几乎没有操作 UI 的函数。

我有另一个从 ClassA 扩展的类 ClassB ,它处理与 map 相关的逻辑。 ClassB 调用 ClassA 的函数 updateNearByNames

但是当函数到达需要访问 UI 资源的行时 findViewById(R.id.namesAround); 它会抛出 NullPointerException

UI 资源存在,如果从 ClassA 内调用,该函数可以正常工作。

08-09 22:43:22.705: E/AndroidRuntime(5593): FATAL EXCEPTION: main
08-09 22:43:22.705: E/AndroidRuntime(5593): java.lang.NullPointerException
08-09 22:43:22.705: E/AndroidRuntime(5593): at android.app.Activity.findViewById(Activity.java:1839)

代码:

public class ClassA extends ListActivity {

@Override
protected void onCreate(final Bundle savedInstanceState) {
setContentView(R.layout.main_v);
...

}
public void updateNearByNames() {
Spinner reportEventNamesAroundSpinner = (Spinner) findViewById(R.id.namesAround); // Error Here
...
...
}
}


public class ClassB extends ClassA implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, OnItemSelectedListener {
...
@Override
public void onConnected(Bundle connectionHint) {
updateNearByNames();
}
}

最佳答案

这样是行不通的。您无法仅通过子类化 Activity 来访问它的 Views,您将始终获得 NPE。您需要做的是将构造函数添加到第二个类并传递 Activity 的实例。

  public ClassB(ClassA a){
this.a = a;
//a is a class field
}

稍后在 ClassB 的某些方法中:

  a.yourMethodInClassAThatAccessesViews();

ClassA实例化ClassB:

 ClassB b = new ClassB(this);

另一个选项是将公共(public)初始值设定项添加到 ClassB:

   public void initContext(ClassA a){
this.a = a;
}

关于java - 从扩展类调用方法时访问资源出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com