2012-11-06 136 views
1

我做了一个Android应用程序。 Eclipse不会向我报告我的代码中存在哪些错误。我的Android模拟器显示模拟器错误

但是,如果我跑我的项目,然后仿真器显示:

emulator error http://s2.ipicture.ru/uploads/20121106/466GCZH9.png

我的Java代码是(MainActivity.java):

package ru.startandroid.develop.AppLog; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnClickListener{ 
    TextView myText = (TextView) findViewById(R.id.myText); 
    Button myBtnCancel = (Button) findViewById(R.id.myBtnCancel); 
    Button myBtnOK = (Button) findViewById(R.id.myBtnOK); 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.myBtnCancel: 
      myText.setText("Нажата кнопка Cancel"); 
     break; 
     case R.id.myBtnOK: 
      myText.setText("Нажата кнопка ОК"); 
     break; 
    } 

    } 
} 

回答

0

更改代码象下面这样:

声明在实例级别的变量,并指定内部onCreate()

public class MainActivity extends Activity implements OnClickListener{ 
    TextView myText = null; 
    Button myBtnCancel = null; 
    Button myBtnOK = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     myText = (TextView) findViewById(R.id.myText); 
     myBtnCancel = (Button) findViewById(R.id.myBtnCancel); 
     myBtnOK = (Button) findViewById(R.id.myBtnOK); 
    } 
2

您只能使用findViewById()调用setContentView()后:

public class MainActivity extends Activity implements OnClickListener{ 
    TextView myText; 
    Button myBtnCancel; 
    Button myBtnOK; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     myText = (TextView) findViewById(R.id.myText); 
     myBtnCancel = (Button) findViewById(R.id.myBtnCancel); 
     myBtnOK = (Button) findViewById(R.id.myBtnOK); 
    } 
+0

正是!非常感谢你!! –

+0

不客气,(_Pojaluysta_?)请点击本答题复选标记以接受它。 – Sam

1

值需要绑定的setContentView方法之后调用findById的窗口小部件(TextView的和按钮),因为取决于它:

TextView myText; 
Button myBtnCancel; 
Button myBtnOK; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myText = (TextView) findViewById(R.id.myText); 
    myBtnCancel = (Button) findViewById(R.id.myBtnCancel); 
    myBtnOK = (Button) findViewById(R.id.myBtnOK); 
}