在android中调用外部方法?

时间:2013-11-07 12:57:34

标签: android

我是android初学者,我在继承的基础知识中尝试使用此代码从void函数类A获取消息并使其显示但我无法...向我显示此消息java.lang.nullpointerexeption。 ..这是A级和主要活动的鳕鱼......谢谢:

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 个答案:

答案 0 :(得分:2)

从活动传递上下文:

 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();
}

}

答案 1 :(得分: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();
        }   
    }
});

} }

答案 2 :(得分:0)

您正在以错误的方式创建活动A.活动由Android管理,因此您不会创建活动,而是通知系统启动活动。您通知Android的方式是使用意图

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

然后你可以在A活动的 onResume 中显示Toast。

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

或者你可以像@imperator_sp那样更改类A

答案 3 :(得分:0)

根据Java,你在这里做的很好但是当谈到android时,这不是一个好习惯。你在这里可以做的是,不要用Activity扩展A类,只需用下面提到的方法替换方法showA()

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

并从您想要的任何地方调用此方法: -

showA(this, "Class A");
相关问题