1

我对android和java开发都很陌生。我正在尝试构建一个简单的应用程序。目前这很容易,但我似乎无法让代码运行。一旦我在模拟器中运行该应用程序,它就会发出一条警报,说我的应用程序已停止。

这是我的代码:

package com.example.ultimatescoreclock;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.os.CountDownTimer;

public class MainActivity extends Activity {

    // variables for the clock
    byte minRemaining = 0;
    byte secRemaining = 0;
    long msRemaining = 360000;  // six minutes
    TextView mainClock = (TextView) findViewById(R.id.clockMain);

    @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.activity_main, menu);
        return true;
    }

    public byte getMinutes(long millisUntilFinished) {
        return (byte) (millisUntilFinished / 60000);
    }

    public void onMainClockClick() {
        StringBuilder str = new StringBuilder("");

        str.append(minRemaining + ":" + secRemaining);
        mainClock.setText(str);
    }
}

有人可以让我知道我在这里犯了什么愚蠢的错误吗?仅供参考 - 我的 XML 文档为R.id.mainClockTextView 设置了 onClick 属性。

4

2 回答 2

1

-您可以在方法之前定义不能初始化a 。View setContentView()

- TextView mainClock = (TextView) findViewById(R.id.clockMain); 之前 setContentView() 导致崩溃。

-只有方法之后,setContentView()才能将 id 分配Views,因为在此之前Views 没有初始化

-这就是使用的全部意义setContentView(...),它会膨胀XML layout文件,直到你有某种膨胀的视图,你将无法获得对它任何部分的引用

例如:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainClock = (TextView) findViewById(R.id.clockMain); 
    }
于 2012-12-11T03:12:34.990 回答
0
mainClock = (TextView) findViewById(R.id.clockMain);

必须放在之后 setContentView();

这是因为您首先必须设置您Activity使用的布局,然后才能使用它。正在发生的事情是正在创建您的对象,并且您的全局变量(mainClock)正在访问由于onCreate()尚未被调用而尚不存在的东西。

所以TextView mainClock = (TextView) findViewById(R.id.clockMain);改为

TextView mainClock;

和 onCreate() 应该看起来像。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainClock = (TextView) findViewById(R.id.clockMain); //finds the clock TextView
    }
于 2012-12-11T02:58:46.443 回答