Java 将代码移动到另一个类会导致应用程序崩溃
我正在创建一个Android应用程序,一切似乎都很好。当我试图将部分代码移动到另一个文件时,问题就出现了,以便调整进度 假设该应用程序有一个微调器和一个按钮。按下该按钮可读取微调器的当前选定字符串,并向其敬酒。因此,代码是:Java 将代码移动到另一个类会导致应用程序崩溃,java,android,function,class,Java,Android,Function,Class,我正在创建一个Android应用程序,一切似乎都很好。当我试图将部分代码移动到另一个文件时,问题就出现了,以便调整进度 假设该应用程序有一个微调器和一个按钮。按下该按钮可读取微调器的当前选定字符串,并向其敬酒。因此,代码是: Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas); String omada = spinnerOmadas.getSelectedItem().toString(); Toast.makeT
Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);
String omada = spinnerOmadas.getSelectedItem().toString();
Toast.makeText(getApplicationContext(), omada,Toast.LENGTH_SHORT).show();
如果我将这段代码保存在主活动中按钮的onClick函数中,那么一切都会正常工作。我想将它移动到另一个文件,因为我将向它添加更多代码
因此,我使用以下代码创建了一个文件buttonCalculation.java:
package com.test.example;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class buttonCalculation extends MainActivity {
public void calculate(){
Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);
String t1= spinnerOmadas.getSelectedItem().toString();
Toast.makeText(getApplicationContext(), t1, Toast.LENGTH_SHORT).show();
}
}
在主要活动的onClick方法中,我这样做:
buttonCalculation b1 = new buttonCalculation();
b1.calculate();
根据Android Studio的说法,我的方法没有错误,但当我运行应用程序并按下按钮时,它崩溃了
要找到主活动的对象,我必须声明什么吗?首先在主活动中声明微调器按钮作为全局变量:
protected Spinner spinner;
然后在MainActivity的onCreate()
方法中初始化它
spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);
然后您可以在按钮计算类中将其用作:
String t1= spinner.getSelectedItem().toString();
首先将微调器按钮声明为main活动中的全局变量:
protected Spinner spinner;
然后在MainActivity的onCreate()
方法中初始化它
spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas);
然后您可以在按钮计算类中将其用作:
String t1= spinner.getSelectedItem().toString();
我认为问题出在函数
findViewById()
上,因为在buttonCalculation
类中没有定义任何布局。因此,必须将其作为参数传递
public class ButtonCalculation { //I don't find any reason to extend MainActivity here
//also you need a constructor (except if you are using a static method)
public void ButtonCalculation (){
}
public void calculate(ViewGroup root, Context context){
Spinner spinnerOmadas=(Spinner) root.findViewById(R.id.spinnerOmadas);
String t1= spinnerOmadas.getSelectedItem().toString();
Toast.makeText(context, t1, Toast.LENGTH_SHORT).show();
}
}
在你的主要活动中
final ViewGroup root= (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ButtonCalculation b1 = new ButtonCalculation ();
b1.calculate(root, getApplicationContext());
我认为问题出在函数
findViewById()
上,因为在buttonCalculation
类中没有定义任何布局。因此,必须将其作为参数传递
public class ButtonCalculation { //I don't find any reason to extend MainActivity here
//also you need a constructor (except if you are using a static method)
public void ButtonCalculation (){
}
public void calculate(ViewGroup root, Context context){
Spinner spinnerOmadas=(Spinner) root.findViewById(R.id.spinnerOmadas);
String t1= spinnerOmadas.getSelectedItem().toString();
Toast.makeText(context, t1, Toast.LENGTH_SHORT).show();
}
}
在你的主要活动中
final ViewGroup root= (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ButtonCalculation b1 = new ButtonCalculation ();
b1.calculate(root, getApplicationContext());
举个例子,这不应该是你整理东西的方式。如果你让它变得更复杂,更难维护的话。嘿,伙计。我努力阅读了你的日志并粘贴了你问题中的错误。你恢复了吗?你为什么拒绝告诉我们你的错误?你是什么意思?什么拒绝?你要我的航海日志,我把它寄了@山塔努的回答奏效了。问题是布局没有在任何地方定义,并且在未传递给新类/方法的情况下无法访问。您的日志包含:com.duk3r.prisma.buttonCalculation.calculation(buttonCalculation.java:14)上的android.app.Activity.findViewById(Activity.java:1825)处的java.lang.NullPointerException在com.duk3r.prisma.MainActivity$1.onClick(MainActivity.java:53)等处。。。如果你把它留在问题中(就像我为你添加的那样),而不是一个6000行的logcat,那么这将是一个完美的问题。举个例子。这不应该是你整理东西的方式。如果你让它变得更复杂,更难维护的话。嘿,伙计。我努力阅读了你的日志并粘贴了你问题中的错误。你恢复了吗?你为什么拒绝告诉我们你的错误?你是什么意思?什么拒绝?你要我的航海日志,我把它寄了@山塔努的回答奏效了。问题是布局没有在任何地方定义,并且在未传递给新类/方法的情况下无法访问。您的日志包含:com.duk3r.prisma.buttonCalculation.calculation(buttonCalculation.java:14)上的android.app.Activity.findViewById(Activity.java:1825)处的java.lang.NullPointerException在com.duk3r.prisma.MainActivity$1.onClick(MainActivity.java:53)等处。。。如果您将它留在问题中(就像我为您添加的那样),而不是6000行的logcat,那么这将是一个完美的问题。我只是扩展了MainActivity,因为我希望能够更轻松地解析微调器和MainActivity的xml中的所有其他内容。尝试了你的代码,它给我的唯一错误是“getApplicationContext()”。它无法解析。小编辑,现在试试。我只扩展了MainActivity,因为我希望能够更轻松地解析微调器和MainActivity的xml中的所有其他内容。尝试了你的代码,它给我的唯一错误是“getApplicationContext()”。无法解决此问题。请进行小编辑,现在再试一次。