[英]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.