Activity 返回 null 并产生 NullPointerException,即使我实现了它
Activity returning null and producing NullPointerException even though I implemented it
我有一个 class 扩展 ParseQUeryAdapter,因此我可以使用 notifyDataSetChanged
功能。适配器 class 称为 mainAdapter
。
这是我在 mainAdapter 中的 notifyDataSetCHanged 方法:
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
MainActivity mainActivity = new MainActivity();
mainActivity.getItems();
}
这是我在 MainActivity 中的 getItems() 方法:
public void getItems(){
if(adapter == null){
Toast.makeText(MainActivity.this, "null", Toast.LENGTH_SHORT).show();
}
}
应用程序在加载时崩溃。如您所见,我植入了一个 if
以便我可以查看 adapter
是否为空。但它仍然崩溃。
根据调试器,它在到达 if
行后以绿色显示 "adapter:null"。但是,我在 onCreate() 中有这个:
adapter = new mainAdapter(this);
然后我声明了它:
mainAdapter adapter
有什么方法可以解决我的问题吗?虽然我正在实施 class,但为什么它仍然为空?我明确表示adapter = new mainAdapter()
你永远不应该用 new
实例化你的 activity 类;他们应该使用 startActivity()
和相关 API 进行交互。
使用 new
创建的 activity 不会在 ActivityManager 中注册,不会显示在屏幕上,并且 不会有任何生命周期调用的回调.
由于您的 MainActivity
实例的 onCreate()
方法尚未 运行,adapter
尚未创建。
在您的情况下,您似乎希望您的 ParseQueryAdaptor 子类以某种方式引用您的 activity,以便它可以访问正确的。
如果你想引用现有的 activity 那么你必须将 activity 对象传递到你想使用它的地方(或者当你在 class 有可用的)。
您可以做的一件事是创建一个将 MainActivity 对象传递到您的 ParseQUeryAdapter 的方法。然后,当您在适配器中调用内容时,请执行以下操作: activityObject.whatevermethodyouwantocallontheactiviy()
请务必先对 activity 对象进行错误检查。
IE:
private MainActivity activity;
public void setup(MainActivity activity){ this.activity = activity;}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
if(activity != null){
activity.getItems();
}
}
我有一个 class 扩展 ParseQUeryAdapter,因此我可以使用 notifyDataSetChanged
功能。适配器 class 称为 mainAdapter
。
这是我在 mainAdapter 中的 notifyDataSetCHanged 方法:
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
MainActivity mainActivity = new MainActivity();
mainActivity.getItems();
}
这是我在 MainActivity 中的 getItems() 方法:
public void getItems(){
if(adapter == null){
Toast.makeText(MainActivity.this, "null", Toast.LENGTH_SHORT).show();
}
}
应用程序在加载时崩溃。如您所见,我植入了一个 if
以便我可以查看 adapter
是否为空。但它仍然崩溃。
根据调试器,它在到达 if
行后以绿色显示 "adapter:null"。但是,我在 onCreate() 中有这个:
adapter = new mainAdapter(this);
然后我声明了它:
mainAdapter adapter
有什么方法可以解决我的问题吗?虽然我正在实施 class,但为什么它仍然为空?我明确表示adapter = new mainAdapter()
你永远不应该用 new
实例化你的 activity 类;他们应该使用 startActivity()
和相关 API 进行交互。
使用 new
创建的 activity 不会在 ActivityManager 中注册,不会显示在屏幕上,并且 不会有任何生命周期调用的回调.
由于您的 MainActivity
实例的 onCreate()
方法尚未 运行,adapter
尚未创建。
在您的情况下,您似乎希望您的 ParseQueryAdaptor 子类以某种方式引用您的 activity,以便它可以访问正确的。
如果你想引用现有的 activity 那么你必须将 activity 对象传递到你想使用它的地方(或者当你在 class 有可用的)。
您可以做的一件事是创建一个将 MainActivity 对象传递到您的 ParseQUeryAdapter 的方法。然后,当您在适配器中调用内容时,请执行以下操作: activityObject.whatevermethodyouwantocallontheactiviy()
请务必先对 activity 对象进行错误检查。
IE:
private MainActivity activity;
public void setup(MainActivity activity){ this.activity = activity;}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
if(activity != null){
activity.getItems();
}
}