문제

저는 Android 개발이 처음이고 첫 번째 애플리케이션을 구축하려고 합니다.저는 현재 시작 값이 20인 상태에서 사용자가 총계를 +1, -1, +5, -5씩 증가시킬 수 있는 간단한 카운터를 구축하려고 합니다.내 앱을 실행하려고 하면 항상 즉시 작동이 중단되고 어떻게 해결해야 할지 막막합니다.

내 코드는 다음과 같습니다.

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와 함께합니다.

버튼 ID

를 사용하여 edittext 보기를 찾으려고합니다.

레이아웃에 따라이 줄을 변경하십시오

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

~

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

또한 다른 문제는 settext edittext

에 있습니다

Display.setText(Total);
.

int 입니다. 문자열 또는 유효한 문자열 자원 ID

여야합니다.

정수를 설정하는 경우 자원 ID로 간주됩니다

SetText 메서드가 수행하는이 작업은 ...

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

두 가지 중 하나를 변경하여 int를 변경하여 올바른 문자열 자원 ID 을 전달하거나 int를이

와 같은 문자열을 변환합니다.
Display.setText(Integer.toString(Total)); 
.

다른 팁

디버거를 사용해야합니다.잘못된 값이 표시 될 때까지 OnCreate 메서드에서 각 행을 단계적으로 수행합니다. 아마도 NULL 포인터가 표시됩니다.당신은 당신이 당신의 신청서를 어떻게 지시했는지 말하지 만 Eclipse 또는 Android Studio를 모두 사용하는 것은 줄 디버그 스테핑을 통해 줄을 허용합니다.이 기능을 사용하면 버그를 빠르고 쉽게 찾을 수 있습니다.

https://developer.android.com/tools/debugging/debugging-projects.html

레이아웃에 이러한 항목이 모두 존재하는지 확인하세요. activity_mail.xml

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

그리고 내 말은, Button 신분증으로 btnPlus1 , 그런 다음 Button 신분증으로 btnMin1, 등등.

예외는 다음과 같으므로 NullPointerException 문제는 아마도 ID를 잘못 입력했는데 그 중 하나(또는 그 이상이)가 반환된다는 것입니다. null.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top