Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将代码移动到另一个类会导致应用程序崩溃_Java_Android_Function_Class - Fatal编程技术网

Java 将代码移动到另一个类会导致应用程序崩溃

Java 将代码移动到另一个类会导致应用程序崩溃,java,android,function,class,Java,Android,Function,Class,我正在创建一个Android应用程序,一切似乎都很好。当我试图将部分代码移动到另一个文件时,问题就出现了,以便调整进度 假设该应用程序有一个微调器和一个按钮。按下该按钮可读取微调器的当前选定字符串,并向其敬酒。因此,代码是: Spinner spinnerOmadas=(Spinner) findViewById(R.id.spinnerOmadas); String omada = spinnerOmadas.getSelectedItem().toString(); Toast.makeT

我正在创建一个Android应用程序,一切似乎都很好。当我试图将部分代码移动到另一个文件时,问题就出现了,以便调整进度

假设该应用程序有一个微调器和一个按钮。按下该按钮可读取微调器的当前选定字符串,并向其敬酒。因此,代码是:

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()”。无法解决此问题。请进行小编辑,现在再试一次。