2014-02-08 5 views
2

Я новичок в android. Я просто попытался создать простое приложение, которое выполняет основные математические операции (сложение, вычитание, умножение и деление). Когда я пытаюсь запустить код, я получаю ошибку FATAL EXCEPTION: main. Я прошел через другие темы, которые имели ту же проблему. Я все еще не мог понять, почему у меня такая ошибка.FATAL EXCEPTION: основной. (Исключение Runtime). Android

Файл mainactivity.java: package com.example.mathematicsopr;

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    Button add,sub,mul,div; 
    TextView display2; 
    EditText display,display1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     //int c=0; 
     add = (Button) findViewById(R.id.bAdd); 
     sub = (Button) findViewById(R.id.bSub); 
     mul = (Button) findViewById(R.id.times); 
     div = (Button) findViewById(R.id.divide); 


     display = (EditText) findViewById(R.id.tvDisplay); 
     String myFirstNum = display.getText().toString(); 
     final int a = Integer.parseInt(myFirstNum); 
     display1 = (EditText) findViewById(R.id.tvDisplay1); 
     String mySecondNum = display1.getText().toString(); 
     final int b = Integer.parseInt(mySecondNum); 
     display2 = (TextView) findViewById(R.id.tvDisplay2); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       int c = a+b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
     sub.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       int c = a-b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
      mul.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       int c = a*b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
    div.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     int c = a/b; 
     display2.setText("Answer is"+c); 
    } 
     }); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    } 

Мой файл activity_main.xml является

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <EditText 
    android:id="@+id/tvDisplay" 
    android:layout_width="342dp" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:text="@string/ref" /> 
    <EditText 
    android:id="@+id/tvDisplay1" 
    android:layout_width="342dp" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:text="@string/ref1" /> 


    <Button 
    android:id="@+id/bAdd" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:text="@string/add" /> 

    <Button 
    android:id="@+id/bSub" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:text="@string/sub" /> 
    <Button 
    android:id="@+id/times" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:text="@string/times" /> 
    <Button 
    android:id="@+id/divide" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:text="@string/divide" /> 
    <TextView 
    android:id="@+id/tvDisplay2" 
    android:layout_width="342dp" 
    android:layout_height="wrap_content" 
    android:text="@string/ref2" /> 
    </LinearLayout> 

Мой strings.xml файл

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">Mathematicalopr</string> 
    <string name="action_settings">Settings</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="ref">Enter first number</string> 
    <string name="add">Add</string> 
    <string name="sub">Subtract </string> 
    <string name="times">Multiply</string> 
    <string name="divide">divide</string> 
    <string name="ref1">Enter second number</string> 
    <string name="ref2">Answer is</string> 

</resources> 

Logcat:

02-08 10:50:43.962: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0 
02-08 10:50:43.972: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0 
02-08 10:50:43.972: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0 
02-08 10:50:44.022: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0 
02-08 10:50:44.022: W/Trace(2302): Unexpected value from nativeGetEnabledTags: 0 
02-08 10:50:44.422: D/AndroidRuntime(2302): Shutting down VM 
02-08 10:50:44.432: W/dalvikvm(2302): threadid=1: thread exiting with uncaught exception (group=0xb2ca6908) 
02-08 10:50:44.462: E/AndroidRuntime(2302): FATAL EXCEPTION: main 
02-08 10:50:44.462: E/AndroidRuntime(2302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mathematicalopr/com.example.mathematicalopr.MainActivity}: java.lang.NumberFormatException: Invalid int: "Enter first number" 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.os.Looper.loop(Looper.java:137) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at dalvik.system.NativeStart.main(Native Method) 
02-08 10:50:44.462: E/AndroidRuntime(2302): Caused by: java.lang.NumberFormatException: Invalid int: "Enter first number" 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.Integer.invalidInt(Integer.java:138) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.Integer.parse(Integer.java:375) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.Integer.parseInt(Integer.java:366) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at java.lang.Integer.parseInt(Integer.java:332) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at com.example.mathematicalopr.MainActivity.onCreate(MainActivity.java:30) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.Activity.performCreate(Activity.java:5104) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-08 10:50:44.462: E/AndroidRuntime(2302):  ... 11 more 

Могу ли я знать, почему я получаю такое ошибка? Когда я пытаюсь запустить этот код на виртуальном устройстве, приложение неожиданно закрывается. Спасибо :)

Спасибо всем. Извините, видимо, у меня недостаточно репутации, чтобы поблагодарить каждого из вас лично.

+0

Что такое ошибка , и где это происходит? – pedromss

+1

Опубликовать трассировку стека. Вероятно, вы где-то работаете с NPE и не обрабатываете его. –

+1

Опубликовать logcat – BackSlash

ответ

1
String myFirstNum = display.getText().toString(); 
    final int a = Integer.parseInt(myFirstNum); 


    String mySecondNum = display1.getText().toString(); 
    final int b = Integer.parseInt(mySecondNum); 

вставить этот код в вашей кнопки добавить прослушиватель событий нажмите тогда вы получите правильные данные

1

Ваш Logcat сказать, что все это,

Прочитайте это

Invalid INT: "Введите первое число"

Вы бросаете значение строки INT, что приводит к java.lang.NumberFormatException.

1

вы должны изменить

<EditText 
android:id="@+id/tvDisplay" 
android:layout_width="342dp" 
android:layout_height="wrap_content" 
android:inputType="number" 
android:hint="@string/ref" /> 

<EditText 
android:id="@+id/tvDisplay1" 
android:layout_width="342dp" 
android:layout_height="wrap_content" 
android:inputType="number" 
android:hint="@string/ref1" /> 

вы должны перейти от

android:text="@string/ref1" 

в

android:hint="@string/ref1" 

, потому что на OnCreate() метод вы запрашиваете значение EditText. И в xml вы установили для него строку, после чего вы проанализировали ее в Integer. Таким образом, у вас есть недопустимая ошибка int. Поэтому просто измените его для каждого EditText.

Вы производите строковое значение int, которое приводит к java.lang.NumberFormatException.

0

Модифицированный код:

package com.example.sampleactivity; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    Button add,sub,mul,div; 
    TextView display2; 
    EditText display,display1; 
    int a,b,c; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     //int c=0; 
     add = (Button) findViewById(R.id.bAdd); 
     sub = (Button) findViewById(R.id.bSub); 
     mul = (Button) findViewById(R.id.times); 
     div = (Button) findViewById(R.id.divide); 


     display = (EditText) findViewById(R.id.tvDisplay); 

     display1 = (EditText) findViewById(R.id.tvDisplay1); 

     display2 = (TextView) findViewById(R.id.tvDisplay2); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       getValues(); 
       c = a+b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
     sub.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
          getValues(); 
       c = a-b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
     mul.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
          getValues(); 
       c = a*b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
     div.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
          getValues(); 
       c = a/b; 
       display2.setText("Answer is"+c); 
      } 
     }); 
    } 


    protected void getValues() { 
     String myFirstNum = display.getText().toString(); 
     a= Integer.parseInt(myFirstNum); 
     String mySecondNum = display1.getText().toString(); 
     b = Integer.parseInt(mySecondNum); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

XML: есть

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/tvDisplay" 
     android:layout_width="342dp" 
     android:layout_height="wrap_content" 
     android:hint="@string/ref" 
     android:inputType="number" /> 

    <EditText 
     android:id="@+id/tvDisplay1" 
     android:layout_width="342dp" 
     android:layout_height="wrap_content" 
     android:hint="@string/ref1" 
     android:inputType="number" /> 

    <Button 
     android:id="@+id/bAdd" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/add" /> 

    <Button 
     android:id="@+id/bSub" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/sub" /> 

    <Button 
     android:id="@+id/times" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/times" /> 

    <Button 
     android:id="@+id/divide" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/divide" /> 

    <TextView 
     android:id="@+id/tvDisplay2" 
     android:layout_width="342dp" 
     android:layout_height="wrap_content" 
     android:text="@string/ref2" /> 

</LinearLayout> 
Смежные вопросы