【问题标题】:Creating an object and running a method创建对象并运行方法
【发布时间】:2018-07-08 16:32:21
【问题描述】:

创建一个对象并运行一个方法: 它编译得很好,但应用程序在启动时立即崩溃:( 我实现了界面和所有.. 怎么回事?

MainActivity.java


 public class MainActivity extends AppCompatActivity {

public interface MyInterfcae {
    void test0();
}


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


     Test t = new Test();

     t.test0();




}

Test.java


public class Test extends MainActivity implements MainActivity.MyInterfcae {

public Button b = (Button)findViewById(R.id.button0);
@Override
public void test0(){



    b.setOnClickListener(new OnClickListener() {


        public void onClick(View arg0) {

            Toast toast = Toast.makeText(getApplicationContext(), "Implemented!" , Toast.LENGTH_SHORT);

            toast.show();

        }
    });




}

它编译得很好,但应用程序在启动时立即崩溃:( 我实现了界面和所有.. 怎么回事?

【问题讨论】:

  • public class Test extends MainActivity ??? Test t = new Test();?????????
  • 怎么了? “测试 t = 新测试();”对象不就是这样创建的吗?
  • 不是 Android 框架的活动!
  • @EpicPandaForce,它适用于测试,但没有在多个活动中实现它。调试:“java.lang.RuntimeException:无法启动活动 ComponentInfo”:(你能帮帮我吗?
  • 下面有一堆行指定崩溃发生的确切行

标签: java android class


【解决方案1】:
public Button b = (Button)findViewById(R.id.button0);

此链接出错。您尚未扩充与此活动相关的布局文件,并且您正在尝试访问 button0。因此,为了解决此错误,请在方法中传递布局文件实例,然后使用该实例执行 findViewById()。

这样做:-

MainActivity.java

public class MainActivity extends AppCompatActivity
{
    public interface MyInterfcae
    {
        void test0(Context context);
    }

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

        Test t = new Test();
        t.test0(this);
    }
}

Test.java

public class Test extends MainActivity implements MainActivity.MyInterfcae
{
    Context context;

    @Override
    public void test0(final Context context)
    {
        this.context = context;

        Button b = (Button) ((Activity)context).findViewById(R.id.button0);

        b.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View arg0) {

                Toast toast = Toast.makeText(context, "Implemented!", Toast.LENGTH_SHORT);
                toast.show();

            }
        });


    }
}

【讨论】:

  • 感谢您的帮助
  • 我尝试传递“公共按钮 b = (Button)findViewById(R.id.button0);”在方法内部,它仍然崩溃
  • 你不能通过那个。你必须传递上下文。我已经更新了答案。请看@xmarcioras
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 2020-09-26
  • 2018-07-07
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
相关资源
最近更新 更多