【发布时间】:2016-07-31 18:25:02
【问题描述】:
我是新手,我正在尝试遵循另一个答案中的一些代码。我有三个文本字段来输入用于计算的数字,下面的按钮应该将它下面的一些文本更改为答案。运行应用程序时没有显示错误,但是当我按下按钮时应用程序崩溃并且我在日志中收到错误消息。这是代码:
public class CalculatorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
class NewActivity extends CalculatorActivity {
//Declare textviews as fields, so they can be accessed throughout the activity.
EditText editTextSubsPrevious;
EditText editTextSubsNow;
EditText editTextDays;
TextView calcText;
Button calcButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
//Bind the EditText views
editTextSubsPrevious = (EditText) findViewById(R.id.editTextSubsPrevious);
editTextSubsNow = (EditText) findViewById(R.id.editTextSubsNow);
editTextDays = (EditText) findViewById(R.id.editTextDays);
calcButton = (Button) findViewById(R.id.calcButton);{
View.OnClickListener onClickListener = new Button.OnClickListener() {
@Override
public void onClick(View v) {
//When the button is clicked, call the calculate method.
calculate();
}
};
}
}
public void calculate(){
//get entered texts from the edittexts,and convert to integers.
Double value1 = Double.parseDouble(editTextSubsPrevious.getText().toString());
Double value2 = Double.parseDouble(editTextSubsNow.getText().toString());
Double value3 = Double.parseDouble(editTextDays.getText().toString());
//do the calculation
Double difference = (value2 - value1) / 7;
Double percent = (difference / 325);
Double amount;
amount = value2 * Math.pow(1 + percent, value3);
calcText.setText(amount.toString());
}
}
}
}
这是错误信息:
FATAL EXCEPTION: main
Process: com.pausetheapp.futurefollowerandsubscribercalculator, PID: 3420
java.lang.IllegalStateException: Could not find method sendMessage(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'calcButton'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:325)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
这里是xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.pausetheapp.futurefollowerandsubscribercalculator.CalculatorActivity"
tools:showIn="@layout/activity_calculator">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/textViewTitle"
android:id="@+id/textViewTitle"
android:textAlignment="center"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextSubsPrevious"
android:layout_marginTop="28dp"
android:layout_below="@+id/textViewTitle"
android:layout_centerHorizontal="true"
android:hint="@string/previousSubsTextField"
android:width="300dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextSubsNow"
android:layout_below="@+id/editTextSubsPrevious"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp"
android:width="300dp"
android:hint="@string/currentSubsTextField" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextDays"
android:hint="@string/daysTextField"
android:width="300dp"
android:layout_marginTop="30dp"
android:layout_below="@+id/editTextSubsNow"
android:layout_alignLeft="@+id/editTextSubsNow"
android:layout_alignStart="@+id/editTextSubsNow" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/accuracyText"
android:id="@+id/textViewAccuracy"
android:layout_below="@+id/editTextDays"
android:layout_alignLeft="@+id/editTextDays"
android:layout_alignStart="@+id/editTextDays"
android:textSize="10dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/calculateButton"
android:id="@+id/calcButton"
android:layout_marginTop="42dp"
android:layout_below="@+id/textViewAccuracy"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/calcDays"
android:id="@+id/calcText"
android:layout_marginTop="22dp"
android:textSize="25dp"
android:layout_below="@+id/calcButton"
android:layout_centerHorizontal="true"
android:gravity="center" />
我刚刚将这一行添加到 java 文件中。
calcText = (TextView) findViewById(R.id.calcText);
【问题讨论】:
-
其实我刚刚纠正了错误,但按钮仍然不起作用。
-
看起来您没有在代码中创建 calcText .. 所以如果您尝试在 calcText 上调用 setText (这是空的,因为我没有看到您创建它的位置)应用程序会崩溃..
-
能否也分享一下您的布局文件?
-
你班级的积木搞砸了!请注意,您在 onCreate 方法中定义了一个子类。我认为您错过了将代码输入到 SO 问题字段中。如果这确实是您的代码,请尝试在方法实现之外声明您的 NewActivity 类。
标签: java android emulation calculator