简体   繁体   English

Android Studio-应用已停止

[英]Android studio - app stopped

please where is problem? 请问哪里有问题? This is my first application, but i really do not know, where can be problem, can someone help me? 这是我的第一个应用程序,但我真的不知道,哪里有问题,有人可以帮助我吗? If i start it, it shows message: Unfortunately helloworld_01 has stopped. 如果我启动它,它将显示消息:不幸的是helloworld_01已停止。 Thank you very much for reply and help! 非常感谢您的答复和帮助!

Code

package com.example.martin.helloworld_01;

import android.app.AlertDialog;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;




public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public  int GetNumber1() {
        EditText text1 = (EditText)findViewById(R.id.editText);
        int num1 = Integer.parseInt(text1.getText().toString());
        return num1;
    }
    public int GetNumber2(){
        EditText text2 = (EditText)findViewById(R.id.editText2);
        int num2 = Integer.parseInt(text2.getText().toString());
        return num2;
    }


    public int num1 = GetNumber1();
    public int num2 = GetNumber2();
    public TextView result = (TextView)findViewById(R.id.textView);

    public void Sum(View v) {
        int sum = num1+num2;
        result.setText(Integer.toString(sum));
    }

    public void Subtraction(View v){
        int subtr= num1-num2;
        result.setText(Integer.toString(subtr));
    }

    public void Multiplication (View v){
        int mult = num1*num2;
        result.setText(Integer.toString(mult));
    }

    public void Division(View v){
        if (num2==0)
        {
            AlertDialog.Builder popupBuilder = new AlertDialog.Builder(this);
            TextView myMsg = new TextView(this);
            myMsg.setText("You can not division with 0!");
            myMsg.setGravity(Gravity.CENTER_HORIZONTAL);
            popupBuilder.setView(myMsg);
        }
        else {
        float divis = num1/num2;
            result.setText(Float.toString(divis));
        }
    }



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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

LogCat logcat的

03-30 12:11:48.554    1925-1925/com.example.martin.helloworld_01 I/art﹕ Not late-enabling -Xcheck:jni (already on)
03-30 12:11:48.805    1925-1925/com.example.martin.helloworld_01 D/AndroidRuntime﹕ Shutting down VM
    --------- beginning of crash
03-30 12:11:48.806    1925-1925/com.example.martin.helloworld_01 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.martin.helloworld_01, PID: 1925
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.martin.helloworld_01/com.example.martin.helloworld_01.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
            at android.app.Activity.findViewById(Activity.java:2071)
            at com.example.martin.helloworld_01.MainActivity.GetNumber1(MainActivity.java:24)
            at com.example.martin.helloworld_01.MainActivity.<init>(MainActivity.java:35)
            at java.lang.reflect.Constructor.newInstance(Native Method)
            at java.lang.Class.newInstance(Class.java:1572)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

XML XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/editText"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="73dp"
        android:hint="Number1" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/editText2"
        android:layout_below="@+id/editText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="49dp"
        android:hint="Number2" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Result"
        android:id="@+id/textView"
        android:textIsSelectable="false"
        android:textSize="50dp"
        android:layout_marginBottom="43dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="+"
        android:id="@+id/button"
        android:layout_below="@+id/editText2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="42dp"
        android:onClick="Sum" />

    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="-"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button"
        android:layout_alignLeft="@+id/textView"
        android:layout_alignStart="@+id/textView"
        android:onClick="Subtraction" />

    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="*"
        android:id="@+id/button3"
        android:layout_alignTop="@+id/button2"
        android:layout_alignRight="@+id/textView"
        android:layout_alignEnd="@+id/textView"
        android:onClick="Multiplication" />

    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="/"
        android:id="@+id/button4"
        android:layout_alignTop="@+id/button3"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="Division" />

</RelativeLayout>

You need to instantiate the view elements in onCreate() before using them anywhere else in the class. 您需要在onCreate()实例化view元素,然后再在类中的其他任何地方使用它们。 We declare them as class members, so other functions cal also access them and instantiate them in onCreate() . 我们将它们声明为类成员,因此其他函数也可以访问它们并在onCreate()实例化它们。 You need to call your GetNumber() methods in the function that is executed on button press because user would have entered something in the textbox before that. 您需要在按下按钮时执行的函数中调用GetNumber()方法,因为用户在此之前已经在文本框中输入了一些内容。

You can try this implementation: 您可以尝试以下实现:

public class MainActivity extends ActionBarActivity 
{
    EditText text1, text2;
    TextView result

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text1 = (EditText)findViewById(R.id.editText);
        text2 = (EditText)findViewById(R.id.editText2);
        result = (TextView)findViewById(R.id.textView);
    }

    public  int GetNumber1() 
    {
        int num1 = Integer.parseInt(text1.getText().toString());
        return num1;
    }
    public int GetNumber2()
    {
        int num2 = Integer.parseInt(text2.getText().toString());
        return num2;
    }

    public void Sum(View v) 
    {
        int num1 = GetNumber1();
        int num2 = GetNumber2();

        int sum = num1+num2;
        result.setText(Integer.toString(sum));
    }

    public void Subtraction(View v)
    {
        int num1 = GetNumber1();
        int num2 = GetNumber2();

        int subtr= num1-num2;
        result.setText(Integer.toString(subtr));
    }

    public void Multiplication (View v)
    {
        int num1 = GetNumber1();
        int num2 = GetNumber2();

        int mult = num1*num2;
        result.setText(Integer.toString(mult));
    }

    public void Division(View v)
    {
        int num1 = GetNumber1();
        int num2 = GetNumber2();

        if (num2==0)
        {
            AlertDialog.Builder popupBuilder = new AlertDialog.Builder(this);
            TextView myMsg = new TextView(this);
            myMsg.setText("You can not division with 0!");
            myMsg.setGravity(Gravity.CENTER_HORIZONTAL);
            popupBuilder.setView(myMsg);
        }
        else 
        {
            float divis = num1/num2;
            result.setText(Float.toString(divis));
        }
    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM