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

私がここで犯したばかげた間違いを誰かに教えてもらえますか?R.id.mainClock参考までに-私のXMLドキュメントには、 TextViewにonClickプロパティが設定されています。

4

2 に答える 2

1

-メソッドの前にを定義することはできますが、初期化することはできません。View setContentView()

- TextView mainClock = (TextView) findViewById(R.id.clockMain); 以前 setContentView() はクラッシュを引き起こしています。

-メソッドの後でのみ、にIDを割り当てることができます。それまでは、が初期化されませんsetContentView()ViewsViews

-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 に答える