在 TextView 上设置文本时崩溃
Crash when setText on TextView
当我尝试生成此代码时,出现此错误:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'。
这是我的代码:
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
private Tablero fondo;
int x;
int y;
private boolean activo = true;
int intento = 10;
String numerointentos;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
TextView Tiradas = (TextView) findViewById(R.id.Intentos) ;
numerointentos = Integer.toString(intento);
Tiradas.setText(numerointentos);
fondo = new Tablero(this);
fondo.setOnTouchListener(this);
linearLayout1.addView(fondo);
fondo.casillas = new Casilla[8][8];
for (int f = 0; f < 8; f++){
for (int c = 0; c < 8; c++){
fondo.casillas[f][c] = new Casilla();
}
}
这是 .xml 代码:
<?xml version= "1.01" encoding="utf-8"?>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width= "fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:weightSum="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reiniciar"
android:id="@+id/btnReiniciar"
android:onClick="presionado"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/Intentos"
android:layout_gravity="center_horizontal" />
显然还有更多的代码和代码和类,但这是包含 setText 的唯一代码。
还有一个问题。如果我想在另一个 public voids 或方法中修改 TextView 的值,我应该怎么做?
感谢你们的帮助,我在那个网站上搜索了答案,但我无法解决。我不知道原因。谢谢!
为什么不尝试将文本视图设为全局变量?然后您也可以在其他功能中访问该文本字段。
像这样。
public class MainActivity extends AppCompatActivity
{
TextView Tiradas;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManAger.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
Tiradas = (TextView) findViewById(R.id.Intentos) ;
numerointentos = Integer.toString(intento);
Tiradas.setText(numerointentos);
fondo = new Tablero(this);
}
}
将 TextView
的声明移动为 class' 属性
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
public TextView Tiradas;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView( ... );
Tiradas = (TextView) findViewById(R.id.Intentos);
Tiradas.setText(numerointentos);
}
}
编辑:
确保您没有 activity_main.xml
文件的其他变体(例如横向或更大的屏幕尺寸)。如果有,请将缺少的视图添加到该布局文件中。
因为如果在引用的布局中找不到视图,findViewById(int) 将 return null
。
当我尝试生成此代码时,出现此错误:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'。
这是我的代码:
public class MainActivity extends AppCompatActivity implements View.OnTouchListener{
private Tablero fondo;
int x;
int y;
private boolean activo = true;
int intento = 10;
String numerointentos;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
TextView Tiradas = (TextView) findViewById(R.id.Intentos) ;
numerointentos = Integer.toString(intento);
Tiradas.setText(numerointentos);
fondo = new Tablero(this);
fondo.setOnTouchListener(this);
linearLayout1.addView(fondo);
fondo.casillas = new Casilla[8][8];
for (int f = 0; f < 8; f++){
for (int c = 0; c < 8; c++){
fondo.casillas[f][c] = new Casilla();
}
}
这是 .xml 代码:
<?xml version= "1.01" encoding="utf-8"?>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width= "fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:weightSum="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/reiniciar"
android:id="@+id/btnReiniciar"
android:onClick="presionado"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/Intentos"
android:layout_gravity="center_horizontal" />
显然还有更多的代码和代码和类,但这是包含 setText 的唯一代码。
还有一个问题。如果我想在另一个 public voids 或方法中修改 TextView 的值,我应该怎么做?
感谢你们的帮助,我在那个网站上搜索了答案,但我无法解决。我不知道原因。谢谢!
为什么不尝试将文本视图设为全局变量?然后您也可以在其他功能中访问该文本字段。
像这样。
public class MainActivity extends AppCompatActivity
{
TextView Tiradas;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManAger.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
Tiradas = (TextView) findViewById(R.id.Intentos) ;
numerointentos = Integer.toString(intento);
Tiradas.setText(numerointentos);
fondo = new Tablero(this);
}
}
将 TextView
的声明移动为 class' 属性
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
public TextView Tiradas;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView( ... );
Tiradas = (TextView) findViewById(R.id.Intentos);
Tiradas.setText(numerointentos);
}
}
编辑:
确保您没有 activity_main.xml
文件的其他变体(例如横向或更大的屏幕尺寸)。如果有,请将缺少的视图添加到该布局文件中。
因为如果在引用的布局中找不到视图,findViewById(int) 将 return null
。