【问题标题】:Showing Null Pointer Exception When Calling function from another class Android从另一个类Android调用函数时显示空指针异常
【发布时间】:2014-09-29 05:49:38
【问题描述】:

我有一个名为 car 的类,它在 GoodActivity Class 中实现了 LocationListerner class(default class)。所以Car class 有一个名为onLocationChanged() 的函数。在onLocationChanged() 函数中,我调用了名为fun() 的函数,它是另一个名为Contact3 的类的静态函数。当调用函数fun() 时,我得到一个空指针异常错误

fun() 函数调用了另一个名为 SongsActivity 的类中的 posts() 方法。

GoodActivity 类

  public class GoodActivity extends Activity {
  Button button2;
  good s;
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_good);         
    }

  public class car implements LocationListener{
    public void onLocationChanged(Location location) {           
         try{
             String name="vijay";           
             Contact3.fun(GoodActivity.this,name);
             }catch(Exception e){
                Toast.makeText(GoodActivity.this, e.toString()+"good", Toast.LENGTH_LONG).show();
        }}}}

Contact3 类

  public class Contact3 {
  public static void fun(Context context,String name) { 
  SongsActivity s=new SongsActivity();
  s.posts(name);    
  }
  }

SongsActivity 类

    public class SongsActivity extends Activity {
    public void posts(String name){     
    try {
    Log.d("Tests", s);`
    } catch (Exception e) {
        Toast.makeText(SongsActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
       }}}

当调用函数fun() 时,我得到一个空指针异常错误

请帮忙。

【问题讨论】:

  • 你能发布你的日志猫吗
  • 你不能用不可见的活动制作ToastSongsActivity 不可见,但您尝试使用 SongsActivity.this 显示 Toast
  • 你不能创建 Activity 类的实例,你会得到 NPE,因为 Activity 的上下文为空,如果你想从其他类发送消息,你必须将 Context 传递给该类

标签: android performance android-intent android-activity nullpointerexception


【解决方案1】:

SongsActivity s=new SongsActivity();

行导致问题,因为您尝试使用 SongsActivity.this 上下文而不启动 Activity。如果SongsActivity 是普通的java 类,那么不需要扩展Activity。您可以通过将上下文从 fun 传递到 posts 来显示 Toast。

这样做:

1.SongsActivity中移除extends Activity

2. 在posts方法中再添加一个参数作为上下文:

 public void posts(String name,Context context){     
        try {
           Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
         } catch (Exception e) {

         }
       } 

3.fun方法传递上下文:

  SongsActivity s=new SongsActivity();
  s.posts(name,context);  

【讨论】:

  • 不从歌曲活动中删除扩展活动是可能的吗?我不想删除活动...
  • @Good:让我知道你为什么不想删除extends Activity
  • 在这个活动中,有一些注册的用户交互......是否可以不删除活动?
  • @Good:然后创建单独的普通java类并添加posts方法,然后您可以从两个Activity类访问posts方法。
  • 没关系...在上面的代码中,可以通过活动访问函数吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 2019-09-28
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多