没有错误,但强制关闭

时间:2013-03-10 20:13:25

标签: android forceclose

我是Android新手。我正在编写简单的代码,根据带按钮的EditText更改TextView。我的代码没有错误。但是当我从一台设备上执行它时,我会接近一个力量。

这是我的代码:

public class MainActivity extends Activity {

    //EditText et = (EditText)findViewById(R.id.editText1); << Error if uncomment
    //TextView tv = (TextView)findViewById(R.id.textView1); << Error if uncomment

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


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

3 个答案:

答案 0 :(得分:2)

您不能使用findViewById()来初始化类变量

public class MainActivity extends Activity {

    EditText  et;
    TextView  tv;

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

        // move these here
        et = (EditText)findViewById(R.id.editText1);
        tv = (TextView)findViewById(R.id.textView1);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

如果您考虑一下,布局只会在调用setContentView后初始化,因此您无法在初始化之前找到该布局中的元素,甚至可以将其设置为活动的布局。

答案 1 :(得分:0)

继续明确始终查看LogCat内容并发布您的问题

试试这个:

public class MainActivity extends Activity {

    // You can use findViewById only once the activity has finished creating, so move the initialization to onCreate function
    EditText  et;
    TextView  tv;

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

        et = (EditText)findViewById(R.id.editText1);
        tv = (TextView)findViewById(R.id.textView1);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

编辑:

您可以打开LogCat之类的: 单击圆圈标记的按钮(位于Eclipse右下角)

enter image description here

如果你没有,可以像以下一样提出来:

enter image description here

P.S:我正在使用mac,但对于其他操作系统应该是相同的

答案 2 :(得分:-1)

记住一件事。在致电findViewById后,请始终致电setContent,否则会出现此类错误。