-3

我是 android 初学者,我正在尝试继承基础知识中的这段代码,以从 void 函数类 A 获取消息并使其显示,但我不能......显示这条消息 java.lang.nullpointerexeption ......这个是A类和主要活动的鳕鱼......谢谢:

一个.java:

public class A extends Activity {

    public void showA(){
        Toast.makeText(this, "Class A", Toast.LENGTH_SHORT).show();
    }
}

MainActivity.java:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button show_a=(Button)findViewById(R.id.Show_A);

        show_a.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try{
                    A c=new A();
                    c.showA();
                }
                catch(Exception e){
                    Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show();
                }   
            }
        });
    }
4

4 回答 4

2

从 Activity 传递上下文:

 A c=new A(getApplicationContext());
                c.showA();

更改您的 A 类:

public class A {

Context c;
public A(Context c) {
    this.c=c;
}

public void showA(){
    Toast.makeText(c, "Class A", Toast.LENGTH_SHORT).show();
}

}

于 2013-11-07T13:04:53.150 回答
0

尝试将 A 类更改为:

public class A{
   public void showA(Context ctx){
   Toast.makeText(ctx, "Class A", Toast.LENGTH_SHORT).show();
}

}

public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button show_a=(Button)findViewById(R.id.Show_A);

show_a.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        try{
            A c=new A();
            c.showA(MainActivity.this);
        }
        catch(Exception e){
            Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show();
        }   
    }
});

} }

于 2013-11-07T13:03:32.363 回答
0

您正在以错误的方式创建活动 A。活动由 Android 管理,因此您无需创建活动,而是通知系统启动活动。您通知 Android 的方式是使用Intents

 Intent myIntent = new Intent(this, A.class);
 startActivity(myIntent);

然后您可以在A Activity的onResume中显示 Toast 。

 @Override
 public void onResume(){
     super.onResume();
     showA();
 }

或者您可以像@imperator_sp 所说的那样更改 A 类

于 2013-11-07T13:05:13.483 回答
0

好吧,根据 Java,您在这里所做的事情很好,但是对于 android,这不是一个好习惯。你可以在这里做的是,不要用下面提到的方法来扩展 A 类,Activity而只需用showA()下面提到的方法替换它:

public static void showA(Context context, String text){
    Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}

并从您想要的任何地方调用此方法,如下所示:-

showA(this, "Class A");
于 2013-11-07T13:06:23.200 回答