java - Android 运行时崩溃

标签 java android android-4.4-kitkat

我是 Android 开发新手,正在尝试构建我的第一个应用程序。我目前正在尝试构建一个简单的计数器,允许用户将总计增加 +1、-1、+5、-5,起始值为 20。当我尝试运行我的应用程序时,它总是立即崩溃,我我完全不知道如何修复它。

这是我的代码:

package com.example.mtglifecounter;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

int Total=20;
Button Plus1, Min1, Plus5, Min5;
EditText Display;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Total = 20;
    Plus1 = (Button) findViewById(R.id.btnPlus1);
    Min1 = (Button) findViewById(R.id.btnMin1);
    Plus5 = (Button) findViewById(R.id.btnPlus5);
    Min5 = (Button) findViewById(R.id.btnmin5);
    Display = (EditText) findViewById(R.id.tvTotal);
    Display.setText(Total);

    Plus1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Adds 1 to the counter
            Total = Total + 1;
            Display.setText(Total);
        }
    });

    Min1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Subtract 1 from counter
            Total = Total - 1;
            Display.setText(Total);
        }
    });

    Plus5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Adds 1 to the counter
            Total = Total + 5;
            Display.setText(Total);
        }
    });

    Min5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Subtract 1 from counter
            Total = Total - 5;
            Display.setText(Total);
        }
    });

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
}


@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;
}

@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();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }
}

}

我还有一个保存的 logcat:

04-11 11:56:27.433: D/AndroidRuntime(1459): Shutting down VM
04-11 11:56:27.433: W/dalvikvm(1459): threadid=1: thread exiting with uncaught exception (group=0xb1aabba8)
04-11 11:56:27.453: E/AndroidRuntime(1459): FATAL EXCEPTION: main
04-11 11:56:27.453: E/AndroidRuntime(1459): Process: com.example.mtglifecounter, PID: 1459
04-11 11:56:27.453: E/AndroidRuntime(1459): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mtglifecounter/com.example.mtglifecounter.MainActivity}: java.lang.NullPointerException
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.os.Looper.loop(Looper.java:136)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at java.lang.reflect.Method.invokeNative(Native Method)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at java.lang.reflect.Method.invoke(Method.java:515)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at dalvik.system.NativeStart.main(Native Method)
04-11 11:56:27.453: E/AndroidRuntime(1459): Caused by: java.lang.NullPointerException
04-11 11:56:27.453: E/AndroidRuntime(1459):     at com.example.mtglifecounter.MainActivity.onCreate(MainActivity.java:34)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.Activity.performCreate(Activity.java:5231)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-11 11:56:27.453: E/AndroidRuntime(1459):     at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-11 11:56:27.453: E/AndroidRuntime(1459):     ... 11 more
04-11 11:56:33.373: I/Process(1459): Sending signal. PID: 1459 SIG: 9

我非常感谢您能给我的任何帮助,因为这是我第一次尝试 Android。

谢谢

这是activity_Main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mtglifecounter.MainActivity"
tools:ignore="MergeRootFrame" >

<RelativeLayout 
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"
tools:context="com.example.mtglifecounter.MainActivity$PlaceholderFragment" >

<EditText
    android:id="@+id/etTotal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/LifeTotal"
    android:ems="10"
    android:inputType="number"
    android:text="20" />

<Button
    android:id="@+id/btnmin5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/btnPlus5"
    android:layout_alignBottom="@+id/btnPlus5"
    android:layout_alignLeft="@+id/btnMin1"
    android:onClick="On_Clicked"
    android:text="-5" />

<Button
    android:id="@+id/btnMin1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/btnPlus1"
    android:layout_alignBottom="@+id/btnPlus1"
    android:layout_alignLeft="@+id/LifeTotal"
    android:layout_marginLeft="37dp"
    android:onClick="On_Clicked"
    android:text="-1" />

<Button
    android:id="@+id/btnPlus5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/tvTotal"
    android:layout_below="@+id/btnPlus1"
    android:layout_marginRight="60dp"
    android:layout_marginTop="25dp"
    android:onClick="On_Clicked"
    android:text="+5" />

<Button
    android:id="@+id/btnPlus1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/btnPlus5"
    android:layout_below="@+id/LifeTotal"
    android:layout_marginTop="44dp"
    android:onClick="On_Clicked"
    android:text="+1" />

<TextView
    android:id="@+id/LifeTotal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/tvTotal"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="21dp"
    android:text="Life Total:"
    android:textSize="@dimen/abc_action_bar_title_text_size" />

最佳答案

根据您的代码和布局,问题在于 EditText Id。

您正在尝试使用 Button Id 查找 EditText View

根据您的布局更改此行

Display = (EditText) findViewById(R.id.tvTotal);

Display = (EditText) findViewById(R.id.etTotal);

另外,另一个问题是在 setTextEditText

Display.setText(Total);

Total 是一个 int。它应该是一个字符串或者应该是一个有效的字符串资源ID

如果您设置一个整数,它将被视为资源 Id

这就是 setText 方法的作用...

public final void setText(int resid) {
    setText(getContext().getResources().getText(resid));
}

更改 int 以传递正确的字符串资源 Id 或将 int 转换为字符串,如下所示

Display.setText(Integer.toString(Total)); 

关于java - Android 运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23017689/

相关文章:

java - BufferedWriter 停止写入

java - ArrayList.remove(index),垃圾回收可行吗?

java - 当我尝试使用 anchor 标记从 jsp 页面调用 servlet 页面时,它显示错误

android - 有没有办法在导航高级示例中定义开始选项卡?

android - 在 Kitkat (4.4) 中进入后台时如何识别应用程序?

java - Inflate NavigationView 在 Android 4.4 及更低版本中导致异常

java - 如果程序整夜运行,为什么我的日子不会改变?

android - 以编程方式导入 Room 数据库

android - getActivity() 在 fragment 的 AlertDialog 内为 null

android - Android 4.4 KitKat 上的 shouldInterceptRequest