Java 如何从按钮或onCreate外部写入TextView
好了,是时候问另一个noobie问题了: 我已经将Activity类顶部的TextView声明为static,我认为它应该是“全局的”。然后在onCreate中,我将该变量附加到TextView。看起来是这样的:Java 如何从按钮或onCreate外部写入TextView,java,android,nullpointerexception,Java,Android,Nullpointerexception,好了,是时候问另一个noobie问题了: 我已经将Activity类顶部的TextView声明为static,我认为它应该是“全局的”。然后在onCreate中,我将该变量附加到TextView。看起来是这样的: public class CheckerActivity extends Activity { String testNumber = "0"; public static TextView displayArray; @Override protected void onCrea
public class CheckerActivity extends Activity {
String testNumber = "0";
public static TextView displayArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checker);
int[] numbersArray;
Intent intent = getIntent();
numbersArray = intent.getIntArrayExtra(EnterCurrentNumbersActivity.CURRENT_NUMBERS_ARRAY);
String arrayStringed = Arrays.toString(numbersArray);
displayArray = (TextView) findViewById(R.id.currentNumbers);
displayArray.setText(arrayStringed);
}
然后在我自己在同一个类中创建的一个方法中,我尝试使用TextView声明并向其写入一些内容。像这样:
public void addNumber(String[] numbersToAdd) {
this.setContentView(R.layout.activity_checker);
displayArray.setText(Arrays.toString(numbersToAdd));
}
然后我有一个按钮调用addNumber方法,如下所示:
public void populateButton(View view) {
String[] temp = {"test", "array"};
CheckerActivity addNumbers = new CheckerActivity();
addNumbers.addNumber(temp);
}
但是当点击按钮时,我在addNumber方法上不断得到NullPointerException
我到处都在搜索这个,但我想我只是不知道该问谷歌什么。据我所知,这应该行得通,我哪里做错了
听你的建议。(但是艾尔达·门苏托夫得到了。现在可以工作了!)
07-09 15:49:48.542 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ java.lang.NullPointerException
07-09 15:49:48.542 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于au.com.acent.ash.basiclotochecker.CheckerActivity.addNumber(CheckerActivity.java:85)
07-09 15:49:48.542 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于au.com.acent.ash.basiclotochecker.CheckerActivity.populateButton(CheckerActivity.java:37)
07-09 15:49:48.542 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:525)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view$1.onClick上(view.java:3809)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view.performClick上(view.java:4421)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 在android.view.view$PerformClick.run(view.java:17903)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Handler.handleCallback(Handler.java:730)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:92)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.os.Looper.loop(Looper.java:213)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5225)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.Invokenactive(本机方法)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:525)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:741)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-09 15:49:48.552 21036-21036/au.com.acent.ash.basiclottochecker W/System.err﹕ 在dalvik.system.NativeStart.main(本机方法)
为了回答这个问题,我现在想打电话给你
public void addNumber(字符串[]numbersToAdd)
来自完全不同的类(同一项目中完全不同的文件)
使用此.addNumber(temp)代码>不起作用。
有什么建议吗???不要打电话
this.setContentView(R.layout.activity_checker);
在您的公共void addNumber(字符串[]numbersToAdd)
中
重放
CheckerActivity addNumbers = new CheckerActivity();
addNumbers.addNumber(temp);
在
并使您的字段不是静态的:public TextView displayArray代码>首先不要在addNumber方法中重新设置“this.setContentView(R.layout.activity\u checker)”,然后发布日志。我认为您错过了findViewById()按钮。您不需要this.setContentView(R.layout.activity\u checker)代码>并从textview中删除静态。为什么这些方法是公共的??你从外面接近他们吗?如果是,那么不要这样做<代码>CheckerActivity addNumbers=新的CheckerActivity()代码>您不能这样做。确定,删除此.setContentView(R.layout.activity\u checker)代码>和文本视图中的静态。logcat是:谢谢你,Eldar。它是this.addNumber(temp);成功了!关于我是否想从一个完全不同的类调用addNumbers,有什么建议吗?在哪种类中,你想调用方法“addNumbers(..)?如果这是另一个活动,你不能这样做。若它不是活动类的子类,那个么可以将活动的引用放在“完全不同的类”的构造函数中。无论如何,试试看,如果出了什么问题,问一个新问题。我是从一个公共类调用它的,扩展活动
新活动-新布局。一个文本视图不能属于两个或多个活动
this.addNumber(temp);