【问题标题】:Launching another Activity creates a blank screen and crashes启动另一个 Activity 会创建一个空白屏幕并崩溃
【发布时间】:2010-07-28 18:03:59
【问题描述】:

更新:已修复,这是由于视图中缺少属性以及我不知道如何使用调试器 :)

我真的是 Android 新手。我刚刚完成了记事本教程,并且正在制作类似的东西(大部分代码完全相同)。我正在经历的一系列事件:

  1. 调试应用
  2. 单击菜单,其中包含正确的项目
  3. 点击插入,打开一个新的活动(GoalEdit)
  4. 我在GoalEdit.onCreate 的第一行打了一个断点并收到以下警告:
    一种。 (ActivityManager) 启动超时,放弃唤醒锁!
    湾。 (ActivityManager) HistoryRecord{...}
  5. 的活动空闲超时
  6. 我在setContentView 中的GoalEdit.onCreate 有一个断点 - 在此通过后:
    一种。 ActivityThread.perfo:找不到源。

相关代码如下:

GoalsList.java

/**
 * Add a menu to this activity
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(0, INSERT_ID, 0, R.string.menu_insert);
    return true;
}

/**
 * Catch the menuItemSelected event
 */
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch (item.getItemId()) {
    case INSERT_ID:
        createGoal();
        return true;
    }

    return super.onMenuItemSelected(featureId, item);
}

/**
 * Open the Edit activity to create a new goal
 */
private void createGoal() {
    Intent i = new Intent(this, GoalEdit.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}

GoalEdit.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mDbGoals = new GoalDbTable(this);
    mDbGoals.open();

    setContentView(R.layout.goal_edit);

    mName = (EditText) findViewById(R.id.name);
    Button finishBtn = (Button) findViewById(R.id.finish);

    mRowId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(GoalDbTable.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras  = getIntent().getExtras();
        mRowId = (extras != null) ? extras.getLong(GoalDbTable.KEY_ROWID)
                                  : null;
    }

    populateFields();

    finishBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            setResult(RESULT_OK);
            finish();
        }
    });
}

private void populateFields() {
    if (mRowId != null) {
        Cursor goal = mDbGoals.find(mRowId);
        startManagingCursor(goal);

        mName.setText(goal.getString(
                goal.getColumnIndexOrThrow(GoalDbTable.KEY_NAME)));
    }
}

@Override
protected void onResume() {
    super.onResume();
    populateFields();
}

我觉得错误在于它找不到 GoalEdit(尽管它显然可以)。我的代码中是否有任何明显的 fubar(或我应该检查的其他内容)?

编辑:想出了如何更好地使用调试器,不得不再按几次恢复以显示异常。

例外情况

ERROR/AndroidRuntime(741): 
  java.lang.RuntimeException: Unable to start activity 
  ComponentInfo{com.rossmasters.mygoals/com.rossmasters.mygoals.GoalEdit}: 
    java.lang.RuntimeException: 
      Binary XML file line #9: You must supply a layout_width attribute.

我不确定这是指哪个文件,但我已将layout_width's 添加到每个项目中。

【问题讨论】:

  • Ross 启用你的 logcat,你会得到你的问题,窗口 > 显示视图 > 其他 > Android > Logcat
  • Jorgesys:是的,没错。似乎问题与视图中缺少 layout_width 有关。认为我需要阅读一些关于使用 Eclipse 的调试器的知识:)
  • ;) 是的,您的 goal_edit.xml 布局中缺少属性
  • @Jorgesys:将此作为答案发布,我会接受 :)
  • 有一点在线清理:)

标签: android android-activity


【解决方案1】:

Ross 启用你的 logcat,你会发现你的问题,

窗口 > 显示视图 > 其他 > Android > 日志猫

你可能错过了你的goal_edit.xml布局中的一个属性

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2011-08-04
    • 2015-08-02
    • 1970-01-01
    相关资源
    最近更新 更多