【问题标题】:How to debug an Android app force close error?如何调试 Android 应用程序强制关闭错误?
【发布时间】:2014-02-16 05:26:17
【问题描述】:
public class MainActivity extends Activity {

EditText oETextN;
EditText oETextPh;
Button oButtonSave;
public String givenName;
public String givenPhNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    findViewsById();
    oButtonSave.setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            givenName = oETextN.getText().toString();
            givenPhNum = oETextPh.getText().toString();
            OrgiOperations.Insert2Contacts(getApplicationContext(),
                    givenName, givenPhNum);
            if (OrgiOperations.isTheNumberExistsinContacts(
                    getApplicationContext(), givenPhNum)) {
                Log.i(OrgiOperations.TAG, "Exists");
            } else {
                Log.i(OrgiOperations.TAG, "Not Exists");
            }

        }

    });

    setContentView(R.layout.activity_main);

}

private  void findViewsById(){
    oButtonSave = (Button) findViewById(R.id.SaveBtn);
    oETextN = (EditText) findViewById(R.id.FLName);
    oETextPh = (EditText) findViewById(R.id.Ph);

    //oEText = (EditText) findViewById(R.id.Name);

}

@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;
}

}

我一直在尝试制作一个简单的 Android 应用,将输入的详细信息(姓名和电话号码)直接保存到您的设备电话簿中。这是 MAIN 活动,其他类包含执行此操作的函数,我确信这些函数已正确实现。

当我在手机上运行应用程序时,问题就出现了,不幸的是,经过数小时的冷编码后,我得到了 FORCE CLOSE 错误!

【问题讨论】:

  • 小时?你的日志怎么了?
  • findViewsById 应该在setContentView 之后调用

标签: java android xml forceclose


【解决方案1】:

改成

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

然后

  private  void initializeViews(){
    oButtonSave = (Button) findViewById(R.id.SaveBtn);
    oETextN = (EditText) findViewById(R.id.FLName);
    oETextPh = (EditText) findViewById(R.id.Ph);
    //oEText = (EditText) findViewById(R.id.Name); 
  }

你需要先给activity设置布局的内容,然后再初始化views。

还可以将 findViewsById(); 重命名为 initializeViews() 或更合适的名称,因为您使用 findViewById 将视图初始化为 oButtonSave = (Button) findViewById(R.id.SaveBtn);

编辑:

在视图初始化后有点击监听。

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); 
 oButtonSave = (Button) findViewById(R.id.SaveBtn);
 oETextN = (EditText) findViewById(R.id.FLName);
 oETextPh = (EditText) findViewById(R.id.Ph);
    oButtonSave.setOnClickListener(new OnClickListener(){
    public void onClick(View view){
        givenName = oETextN.getText().toString();
        givenPhNum = oETextPh.getText().toString();
        OrgiOperations.Insert2Contacts(getApplicationContext(),
                givenName, givenPhNum);
        if (OrgiOperations.isTheNumberExistsinContacts(
                getApplicationContext(), givenPhNum)) {
            Log.i(OrgiOperations.TAG, "Exists");
        } else {
            Log.i(OrgiOperations.TAG, "Not Exists");
        }

    }

});
}

【讨论】:

  • 我要问的可能含糊不清,但由于我的android经验低,那么我应该把onclicklistener方法放在哪里?
  • @user3050101 在方法内初始化视图后
  • 请更具体一点,因为这可以在一秒钟内解决我的答案(:
  • @user3050101 我发布了一个代码 sn-p 你想要什么更具体?按照帖子中的建议进行操作
  • 我实际上是在谈论 onclicklistener .. 我完全按照说应用程序现在运行了! (:但是现在当我按下保存按钮时填写字段后,应用程序再次强制关闭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 2012-12-31
相关资源
最近更新 更多