我的Lyout中有一个文本视图,我想在这个textview中设置一些文本。 这应该在一个不是MainActivity类的类中进行。
问题是我得到了一个空指针异常。
这是我的代码:
public class UserInformations extends Activity{
TextView emailTextView;
LocalDatabase localdatabase= new LocalDatabase(this);
public void getUserInformation()
{
emailTextView = (TextView) findViewById(R.id.EmailTextView);
String email = localdatabase.getUserEmail();
emailTextView.setText(email);
}
}
当我在Main Activity类中执行此操作时,它可以正常工作,但它不适用于其他类。
答案 0 :(得分:36)
只有findViewById()
设置当前的活动布局时,才会在Activity
对象上调用setContentView
。如果您通过其他方式添加布局,则需要布局的View
对象并在其上调用findViewById()
。
View v = inflater.inflate(id_number_of_layout); # such as R.layout.activity_main
View innerView = v.findViewById(id_number_of_view_inside_v);
如果布局应该是活动的主要布局,那么请执行以下操作:
public class MyActivity extends Activity{
TextView emailTextView;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(id_number_of_layout);
emailTextView = (TextView) findViewById(R.id.EmailTextView);
// ... whatever other set up you need to do ...
}
public void getUserInformation() {
// .... regular code ...
}
}
答案 1 :(得分:6)
您尚未设置内容View?
使用这样的东西:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
答案 2 :(得分:5)
findViewById(R.id.EmailTextView);
你要么
编辑:根据您的新评论肯定是1。
答案 3 :(得分:4)
时,请致电findViewById
。布局必须已经发生。您必须已经设置了内容视图等。
有很多方法可以解决这个问题,如其他答案中所示,但它们与findViewById
的工作方式完全不同,只有在您完全了解它们的工作方式时才能用作替代品。大多数情况下,等到初始布局已经发生之后才会更有效率。