2016-07-31 1 views
0

Я новичок в этом, и я пытаюсь выполнить какой-то код из другого ответа. У меня есть три текстовых поля, чтобы ввести числа, которые используются для расчета, и кнопку ниже, которая должна изменить текст ниже этого ответа. При запуске приложения ошибок нет, но когда я нажимаю кнопку, приложение падает, и я получаю сообщения об ошибках в журнале. Это код:Создание калькулятора в Android. Приложение отображается на эмуляторе без ошибок, но когда я нажимаю кнопку расчета, он падает

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); 
+0

На самом деле, я просто исправил ошибку, но кнопку еще не работает. – PauseTheCat

+0

Похоже, что вы не создаете calcText в своем коде .. так что если вы попытаетесь вызвать setText на calcText (который является нулевым, потому что я не вижу, где вы его создали), приложение будет разбиваться .. –

+0

Не могли бы вы пожалуйста, поделитесь своим файлом макета. – W0rmH0le

ответ

0

Есть два possibilites ошибки

1> не определен calcText

calcText.setText(amount.toString()); 

2> Или Может быть

Double value1 = Double.parseDouble(editTextSubsPrevious.getText().toString()); 
     Double value2 = Double.parseDouble(editTextSubsNow.getText().toString()); 
     Double value3 = Double.parseDouble(editTextDays.getText().toString()); 

editTextSubsPrevious,`editTextSubsNow`,`editTextDays` => does not contain numbers so that it can be parsed to `Doubles` 
0

Возможно, вы следующий атрибут ваш формат XML-файла:

android:onClick="sendMessage" 

Затем, когда вы щелкаете, андроид поиск метода sendMessage(View view) и не найти (потому что вы не реализованы)

Не удалось найти метод SendMessage (View) в родительском или предком контексте для андроида : OnClick атрибут, определенный на вид класса android.support.v7.widget.AppCompatButton с идентификатором «calcButton»

Таким образом, поскольку настройки вашей являются onClickListener во время выполнения, я думаю, вы можете удалить android:onClick="sendMessage" из файла макета.

Кроме того, линия ниже, должна быть определена следующим образом:

calcButton = (Button) findViewById(R.id.calcButton); 
calcButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //When the button is clicked, call the calculate method. 
     calculate(); 
    } 
}); 
+0

Я добавил calcText в java, и я избавился от «sendMessage» в XML-файле. К сожалению, он все еще не работает, когда я нажимаю кнопку «Расчет». Ничего не меняется. – PauseTheCat

+0

Ок .. У меня появилось несколько других ошибок. Например, вы создали одно действие внутри другого. Я буду имитировать ваш код и вернуться с обновлениями. – W0rmH0le

+0

@PauseTheCat Не могли бы вы также поделиться с Activity_calculator, чтобы подготовить исправление к вашему коду? – W0rmH0le

0

В макете, скорее всего, вы назначил метод SendMessage() для обработки OnClick события и не создали такой метод в деятельности.

проверить на android:onClick="sendMessage" в вашем расположении.

Либо создайте метод sendMessage (View view) и напишите свой код там, либо удалите его и используйте свой calcBtn.setOnClickListner (объект View.OnClickListner).

0

Если приложение падает в ответ на нажатие кнопки он может быть по следующим причинам:

  1. Функции вы зарегистрировали для атрибута OnClick кнопки в файле макет .xml не существует в активность.Вы можете убедиться, что имя функции в атрибуте onClick соответствует имени функции, которую вы хотите вызвать в своей деятельности.
  2. Что-то в функции onClick вызывает исключение. Если это так, вы можете использовать отладчик, установив точку останова внутри , которая выполняет функцию и проверяет ваш код и значения, пока вы выполняете шаг через программу. Debug Your App
0

если ур используя этот

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(); 
         } 
        }; 
       } 

и должны использовать

android:onClick="onClick" 

еще и нужно использовать

    calcButton.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v) { 
         //When the button is clicked, call the  calculate method. 
           calculate(); 
           } 

     }); 

 Смежные вопросы

  • Нет связанных вопросов^_^